南京 IAS 架构师峰会观后感

上周六,周日在南京举办了 IAS 架构师峰会,这么多人的技术分享会还是头一次参加,大佬云集,涨了不少姿势。特此一篇记录下印象深刻的几场分享。由于全凭记忆叙述,故只能以流水账的形式还原出现场的收获。

大型支付交易平台的演进过程

大型支付交易平台的演进过程

陈斌,《架构即未来》译者,易宝支付 CTO。

交易系统具备以下特点,交易量大,并发度高,业务敏感度高,响应速度容忍度低… 从而使得支付交易平台需要有以下的特点:

  • 高可用:7X24*365 随时可用
  • 高安全:需满足 PCI-DSS 要求
  • 高效率:每笔交易的成本要低
  • 高扩展:随业务的快速发展扩张

从以上几点话题引申出了系统扩展的三个阶段

**X 轴扩展 – 扩展机器 **

也就是通俗意义中集群方案,横向扩展,通过添加多台机器负载均衡,从而扩展计算能力,这是最简单粗暴,也是最直接易用的方案。

**Y 轴扩展 – 拆分服务 **

当水平扩展遇到瓶颈后,可以进行服务的拆分,将系统按照业务模块进行拆分,从而可以选择性定制化地扩展特定的模块。如电商系统中拆分出订单模块,商品模块,会员模块,地址模块… 由于各个模块的职责不同,如订单模块在双 11 时压力很大,可以多部署一些订单模块,而其他压力不大的模块,则进行少量地部署。

**Z 轴扩展 – 拆分数据 **

服务拆分之后仍然无法解决与日俱增的数据量问题,于是引发了第三层扩展,数据的分片,我理解的 sharding,不仅仅存在于数据库,还包含了 redis,文件等。

另外陈斌老师还聊了一个有意思的话题,系统可用性下降的原因根源是什么?最终他给出的答案是:人。系统升级后引发的事故 80% 是由于人的误操作或者触发了 bug 等人为因素导致的,是人就会手抖。借此引出了单元测试,持续集成,持续交付的重要性。健全这三者是保障系统可用性的最大利器。

在技术晚宴,陈斌老师又分享了一些管理经验:** 如何打造一支优秀的技术团队 **。

分析了构成团队的四要素:

  • 人员:健全职级体系,区别考评,挖掘潜能,及时鼓励,扁平化管理
  • 组织:面向产出,利于创新,敏捷小团队
  • 过程:聚集问题的根源,适当地使⽤用 ITIL,不断优化过程,自动化取代人工
  • 文化:鼓励分享,打破 devops 的边界,鼓励创新,树⽴立正确的技术负债观

对于技术人员来说可能有点抽象,不过对于立志于要成为 CIO 的人肯定是大有裨益的,具体的理解可以参考《架构即未来》中的具体阐释。(ps:这里的架构并不是指技术架构,别问我为什么知道,问问我看了一半后在落灰的那本书,你什么都明白了)


警惕不规范的变量命名

就在最近,项目组开始强调开发规范了,今天分享一个变量名命名不规范的小案例,强调一下规范的重要性。例子虽小,但却比较有启发意义。

Boolean 变量名命名规范

16 年底,阿里公开了《Java 开发规范手册》,其中有一条便是“布尔类型不能以 is 为前缀”。规范中没有举出例子,但是给出了原因:会导致部分序列化框架的无法解析。

看看错误的示范,会导致什么问题,以 Spring 中的 jdbcTemplate 来进行实验。


上一个电商项目的反思

从去年实习到今年转正,陆陆续续接触了大概四个项目。有电商类,互联网保险类,也经历过管理系统。幸运的是,这些项目都是从零开始,避免了让我去维护不堪入目的老旧系统。而这么多项目中令我印象最深刻的,就要属上一个电商项目了。这也是我接触到的真正意义的第一个微服务项目,到今天回首去看曾经的这个项目,有很多突破性地尝试,同时不可避免地也踩入了一些坑点,毕竟摸着石头过河。今天想聊聊我对上一个电商项目的反思。

项目简介

准确的说是一个第三方的电商项目,商品来源是由主流电商的 http 接口提供(目前接入了京东,苏宁),打造我们自己的商城体系。使用的技术包括 springboot,jpa,rpc 框架使用的是 motan,数据库使用的是 oracle,基本都还算是主流的技术。


sinosoft 代码规范

介绍

本文档主要针对我们项目内部正在使用的框架,以及代码审查发现的一些共性问题提出一些开发规范。

JavaBean 规范

1 驼峰命名法【强制】

2 布尔类型规范【强制】
【说明】所有的布尔类型不允许以 is 开头,否则会导致部分序列化,hibernate 框架出现解析异常。
【反例】
原来项目的 BaseDomain 中标记逻辑删除的字段, 在部分场景下会出现问题


博客搬家

陆陆续续,写博客已经写了有 4 年多了,之前一直在 CSDN 维护博客(博客旧址),最近有了点空余时间,使用 hexo 搭了这个博客,的确比 CSDN 清爽多了,首先感谢 @程序猿 DD 推荐的 icarus 模板,国人开发的一个 hexo 模板,插件支持可能不是很完善,但是样式非常让人喜欢。

作为一个前端弱渣,搭建博客的过程还是遇到了不少的困难。原先是打算直接使用 github 个人主页作为博客地址,hexo 对 git 有很好的支持,源代码和博客静态页面都托管在了 github,master 分支放静态页面,hexo 分支放源文件。可惜的是国内坑爹的网速,github.io 的访问速度不尽如人意(github.com 倒还好),于是在宇泽学妹 @ntzyz 的帮助下,搞了 github 的 hook,本地提交到 github 时,代理服务器自动向 master 分支拉取页面,同时设置反向代理和 https。由于 hexo 是静态文件搭建的博客,这种方式可以说是非常合适的。所以,国内的朋友浏览本博客可以直接访问 https://www.cnkirito.moe,如果有国外代理的朋友可以直接访问我的 github 个人主页 https://lexburner.github.io

目前博客功能还不算完善,缺少评论,分享,和一些小插件,以后逐渐完善,不过不影响主要功能。以后这儿就作为我主要更新博客的地方了!


使用 zipkin 做分布式链路监控

介绍

快速入门

  • 安装方式一:使用 zipkin 官方提供的 jar 启动服务
    zipkin 官方提供了一个现成的使用 springboot 写的 zipkin 服务端,客户端的链路监控报告可以通过多种方式(下文会讲解具体的方式)向服务端发送报告。
  • 系统需要安装 java8

  • 下载地址

    配置详解
    存储方式
    查看源码可知其有 4 种持久化方式,本文选择使用最熟悉的 mysql 持久化链路调用信息。

首先建立数据库:
默认情况下 zipkin 运行时数据保存在内存中,重启数据会丢失
数据库脚本下载

查看与 mysql storage 相关的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
@ConfigurationProperties("zipkin.storage.mysql")
public class ZipkinMySQLStorageProperties implements Serializable { // for Spark jobs
private static final long serialVersionUID = 0L;

private String host = "localhost";
private int port = 3306;
private String username;
private String password;
private String db = "zipkin";
private int maxActive = 10;
private boolean useSsl;
...
}

所以,我们使用 mysql 作为持久化策略,启动服务端的脚本也就有了

1
java -server -jar zipkin-server-1.26.0-exec.jar --zipkin.storage.type=mysql --zipkin.storage.mysql.host=localhost --zipkin.storage.mysql.port=3306 --zipkin.storage.mysql.username=root --zipkin.storage.mysql.password=root --zipkin.storage.mysql.db=zipkin
  • 安装方式二
    springcloud 官方按照传输方式分成了三种启动服务端的方式:Sleuth with Zipkin via HTTP,Sleuth with Zipkin via Spring Cloud Stream,Spring Cloud Sleuth Stream Zipkin Collector。只需要添加相应的依赖,之后配置相应的注解,如 @EnableZipkinStreamServer 即可。具体配置参考 Spring Cloud 官方文档

项目中,我们使用第一种作为服务端的启动方式,使用 mysql 作为持久化方案


JAVA 程序员分级,你属于哪一种?

  • 初级 — 初

掌握 java 基础,熟悉常用类库。理解 java web 中的 servlet,jsp,并了解常用的框架对 java web 的封装原理,能够借助框架完成增删改查功能。理解数据库在 web 开发中的地位。

  • 初级 — 中

    理解 java 中较为高级的特性,如反射,动态代理,JVM,内存模型,多线程等等。熟练使用框架,对框架中遇到的 bug,能够借助日志和搜索引擎分析出问题的原因。在团队中,能够独立完成普通后台业务功能的开发。了解数据库的高级特性,如索引,存储引擎等等。


聊聊 IT 行业应届生求职

前言

回首大三下的暑假,那时候刚开始出来找实习,如今已经即将进入大四下学期,恍惚间,已经过去了 8,9 个月。写这篇文章的初衷就是想结合自己的经验给即将要出来找工作的应届生一些建议,想当初自己刚出来时,也得到过热心学长的教导,权当一种传递吧。


Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×