微服务的4个设计原则
本文介绍微服务架构的演进、优缺点和微服务应用的设计原则
微服务架构演进过程
最早应用是单块架构,后来为了具备一定的扩展和可靠性,就有了垂直架构,也就是加了个负载均衡,接下来是前几年比较火的SOA,主要讲了应用系统之间如何集成和互通,而到现在的微服务架构则是进一步在探讨一个应用系统该如何设计才能够更好的开发、管理更加灵活高效。
微服务架构的基本思想就是“围绕业务领域组件来创建应用,让应用可以独立的开发、管理和加速”。
微服务架构的好处
每个微服务组件都是简单灵活的,能够独立部署。不再像以前一样,应用需要一个庞大的应用服务器来支撑。
由一个小团队负责更专注专业,相应的也就更高效可靠。
微服务之间是松耦合的,微服务内部是高内聚的,每个微服务很容易按需扩展。
微服务架构与语言工具无关,自由选择合适的语言和工具,高效的完成业务目标即可。
微服务应用4个设计原则
AKF拆分原则
AKF扩展立方体,是一个叫AKF的公司的技术专家抽象总结的应用扩展的三个维度。理论上按照这三个扩展模式,可以将一个单体系统,进行无限扩展。
X轴:水平复制。单体应用多运行几个实例,做个集群加负载均衡的模式。
Z轴:数据分区。比如一个互联网打车应用突然火了,用户量激增,集群模式扛不住了。就根据用户请求的地区进行数据分区。
Y轴:微服务的拆分模式,就是基于不同的业务拆分。
场景说明:比如打车应用,一个集群撑不住时,分了多个集群,后来用户激增还是不够用,经过分析发现是乘客和车主访问量很大,就将打车应用拆成了三个乘客服务、车主服务、支付服务。三个服务的业务特点各不相同,独立维护,各自都可以再次按需扩展。
前后端分离
简单来讲就是前端和后端的代码分离。不要继续以前的服务端模板技术,比如JSP ,把Java、JS、HTML、CSS都堆到一个页面里,稍复杂的页面就无法维护。这种分离模式的方式有几个好处:
由各自的专家来对各自的领域进行优化,这样前端的用户体验优化效果会更好。
前后端交互界面清晰,就剩下接口和模型,后端的接口简洁明了,更容易维护。
前端多渠道集成场景更容易实现,后端服务无需变更。
无状态服务
要把有状态的业务服务改变为无状态的计算类服务,那么状态数据也就相应的迁移到对应的“有状态数据服务”中。
场景说明:例如我们以前在本地内存中建立的数据缓存、Session缓存,到现在的微服务架构中就应该把这些数据迁移到分布式缓存中存储,让业务服务变成一个无状态的计算节点。迁移后,就可以做到按需动态伸缩,微服务应用在运行时动态增删节点,就不再需要考虑缓存数据如何同步的问题。
Restful通信风格
Restful 通信风格有以下好处:
无状态协议HTTP,具备先天优势,扩展能力很强。例如需要安全加密是,有现成的成熟方案HTTPS可用。
JSON 报文序列化,轻量简单,人与机器均可读,学习成本低,搜索引擎友好。
语言无关,各大热门语言都提供成熟的Restful API框架
当然在有些特殊业务场景下,也需要采用其他的RPC框架,如thrift、avro-rpc、grpc。但绝大多数情况下Restful就足够用了。
微服务架构带来的问题
依赖服务接口变更:服务接口如何管理;接口变更跟踪难;依赖服务调试麻烦
部分模块重复建设:安全认证;配置日志
分布式带来的问题:分布式事务问题;依赖服务不稳定;需要引入异步模式
运维复杂度陡增:部署模块数量倍增;监控进程倍增;故障定位难;问题追溯难
上面的问题有一些解决方案,比如提供文档管理、服务治理、服务模拟的工具和框架; 实现统一认证、统一配置、统一日志框架、分布式汇总分析; 采用全局事务方案、采用异步模拟同步;搭建持续集成平台、统一监控平台等等。
最终,我们是需要一个微服务应用平台才能整体性的解决这些问题。