微服务架构的设计原则主要有以下4点:
(1)AKF拆分原则。
(2)前后端分离。
(3)无状态服务。
(4)Restful通信风格。
1.AKF拆分原则
AKF扩展立方体(参考The Art of Scalability),是一个叫AKF的公司的技术专家抽象总结的应用扩展的三个维度,如图5-3所示。理论上按照这三个扩展模式,可以将一个单体系统进行无限扩展。
图5-3 AKF扩展立方体
X轴:指的是水平复制,很好理解,即单体系统多运行几个实例,做个集群负载均衡的模式。
Z轴:是基于类似的数据分区,比如一个互联网打车应用突然火了,用户量激增,集群模式撑不住了,那就按照用户请求的地区进行数据分区,如在北京、上海、四川等地多建几个集群。
Y轴:就是我们所说的微服务的拆分模式,是基于不同的业务拆分。
场景说明:比如打车应用,一个集群撑不住时,分了多个集群,后来用户激增还是不够用,经过分析发现是乘客和车主访问量很大,就将打车应用拆成了三个服务乘客服务、车主服务、支付服务。三个服务的业务特点各不相同,独立维护,各自都可以再次按需扩展。
2.前后端分离
前后端分离原则(见图5-4),简单来讲就是前端和后端的代码分离,也就是技术上做分离,推荐的模式是最好直接采用物理分离的方式部署,进一步促使进行更彻底的分离。不要继续以前的服务端模板技术,如JSP把Java、JS、HTML、CSS都堆到一个页面里,稍复杂的页面就无法维护。这种分离模式的方式有3个好处:
图5-4 前后端分离
(1)前后端技术分离,可以由各自的专家来对各自的领域进行优化,这样前端的用户体验优化效果会更好。(www.xing528.com)
(2)分离模式下,前后端交互界面更加清晰,就剩下了接口和模型,后端的接口简洁明了,更容易维护。
(3)前端多渠道集成场景更容易实现,后端服务无须变更,采用统一的数据和模型,可以支撑前端的Web UI、移动App等访问。
3.无状态服务
对于无状态服务,首先说一下什么是状态:如果一个数据需要被多个服务共享,才能完成一笔交易,那么这个数据被称为状态。进而依赖这个“状态”数据的服务被称为有状态服务,反之被称为无状态服务,如图5-5所示。
图5-5 无状态服务
那么这个无状态服务原则并不是说在微服务架构里就不允许存在状态,表达的真实意思是要把有状态的业务服务改变为无状态的计算类服务,那么状态数据也就相应地迁移到对应的“有状态数据服务”中。
场景说明:例如以前在本地内存中建立的数据缓存、Session缓存,到现在的微服务架构中就应该把这些数据迁移到分布式缓存中存储,让业务服务变成一个无状态的计算节点。迁移后,就可以做到按需动态伸缩,微服务应用在运行时动态增删节点,就不再需要考虑缓存数据如何同步的问题。
4.Restful通信风格
作为一个原则来讲本来应该是一个“无状态通信原则”,在这里直接推荐一个实践优选的Restful通信风格(见图5-6),原因如下:
图5-6 Restful通信风格
(1)无状态协议HTTP,具备先天优势,扩展能力很强,例如需要安全加密时,有现成的成熟方案HTTPS可用。
(2)JSON报文序列化,轻量简单,人与机器均可读,学习成本低,搜索引擎友好。
(3)语言无关,各大热门语言都提供成熟的Restful API框架,相对其他的一些RPC框架生态更完善。
当然在有些特殊业务场景下,也需要采用其他的RPC框架,如Thrift、Avro-RPC、gRPC,但绝大多数情况下Restful就足够用了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。