jinhailang / blog

技术博客:知其然,知其所以然
https://github.com/jinhailang/blog/issues
60 stars 6 forks source link

读《微服务架构与实践》 #5

Open jinhailang opened 7 years ago

jinhailang commented 7 years ago

《微服务架构与实践》算是入门级的书,除了代码,就没多少页了,但对于新手还是很合适的,里面的一些概念,框架,以及架构等都很有启发作用。所谓的微服务架构,其实一直就是在应用到,这本系统的梳理了这些技术,使得理解更深入了。

我认为微服务最终要的是模块化和自动化,模块化就是系统分解,自动化包括自动生成代码,自动测试,自动部署,自动报警等。

关于微服务

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

尽管“微服务”这种架构风格没有精确的定义,但其具有一些共同的特性,如围绕业务能力组织服务、自动化部署、智能端点、对语言及数据的“去集中化”控制等等。

微服务架构的思考是从与整体应用对比而产生的。

优缺点

微服务是互联网发展的必然结果,软件规模越来越大了,维护起来也越来越费力,互联网讲究的是速度,快速开发快速上线验证。而传统的开发模式,更多是阶段流程式:需求分析,概要设计,详细设计,编码,测试,交付,验收,维护等。显然太慢了,也不够灵活,互联网更多的情况是尝试,需要先出一个简单版本,在快速迭代推进。

随着软件行业的发展,有很多成熟,开源的组件备应用,模块化的系统可以很好的将这些好的组件应用在自己的系统当中,更新,维护也很方便。

优点:

缺点:

关于测试

自己之前对测试不太重视,总以为代码写好了就行,也不知到怎么写测试。换新工作之后体会到了测试的重要性,尤其是自动化测试的概念,感觉以前自己就像猴子。

测试是微服务架构很重要的一个部分,因为涉及到很多模块,复杂的异步逻辑等,调试和 bug 修复难度都更大,所以越早测试越容易解决问题,单元和接口测试是必须的。

自动化测试是持续集成开的保障,不然增加新功能又会导致前面的功能出现问题,测试成本是巨大的,我是经历过的,之前的项目就是没有单元,只有最终的功能性测试,总是重复测试,重复出现问题,举步维艰,不但效率低下,还很打击士气。

我们现在的项目使用 python 写单元测试,GitLab CI 自动化测试,方便多了。

总结

虽然之前也一直认为在程序开发过程中,编码应该只能占很小的部分,大部分时间应该花在设计,测试,以及上线之后的问题发现与解决当中,但是实际却很难做到,缺少方向和方法。

人跟动物最大区别就是人可以创造和使用工具,我想新手和老司机的区别也在此吧。学会使用工具,可以极大的提升工作效率,解放自己,最近在使用swagger 设计 API,可以方便的设计出符合 RESTful 规范的API。后面需要多关注,尝试新的框架和技术。