在当今的互联网业内,很多大型互联网系统,比如淘宝、支付宝、网商银行等,都已经实现了单元化架构,并从中获益匪浅。其实在我们手机里面很多常用APP都是单元化架构,类似高德导航、支付宝、网商银行等金融银行类APP都是将单元化架构进行了很多年,都已经实现了单元化架构,并从中获益匪浅。
什么是单元化
所谓单元,是指一个能完成所有业务操作的自包含集合,在这个集合中包含了所有业务所需的所有服务,以及分配给这个单元的数据。
假如一个业务有30亿数据,采用单元化架构部署的话,我们可以把数据拆解为3份,每份10亿数据,建立3个单元,这三个单元,业务服务一模一样,但是数据库存储的数据不同,分别是10亿数据。
这里根据数据进行单元的拆分,数据需要具备可拆分的属性,比如用户ID等全局唯一标识信息,否则无法拆分单元。
我在公司一年多,一直在使用单元化架构。与我以前熟悉的微服务架构区别还是比较大的,那么什么场景下适合使用单元化架构,我的个人理解
- 在用户量逐渐增长,越来越多,而用户在很多业务操作都需要保证强一致性,单元化架构具有很简单的扩展性
- 用户与用户之间没有很强,很复杂的业务关联。例如相互评论,点赞,拼单等就不适合单元化
传统分层架构
传统架构每一层的服务都有多个节点,上层调用下层都是流量均匀的,随机的。每一层服务都可以单独扩容或者缩容,如下图
单元化架构
单元化架构也是分为了多层结构,但是每层架构的不同服务节点个数固定,调用链也是固定的。一个单元化内部形成了闭环
单元化架构的优势
不管是传统的分布式架构还是单元化架构都不存在完美的设计,任何架构设计都需要根据使用场景的变化而进行相应的选择。传统分布式架构(SOA服务化)优势很明显,不同分层的服务都可以进行独立的伸缩部署,不过这种架构有个问题就是服务水平拆分了,数据库必须进行分库分表,不然日益增长的流量会导致数据库出现问题,可是数据库分库分表并不能解决服务带来的连接数问题,最终会导致数据库连接爆炸,那么如果数据库进行水平拆分那么对于代码的改造和入侵也是巨大的
随着计算机硬件越来越牛,成本越来越低的时代,其实垂直扩容也是一种新的思路,单元化架构就属于一种垂直扩展,不过这种垂直扩展和传统的垂直扩展不一样,属于全集逻辑+数据切片
就和一个个卡片一样,如果某个机房压力很大无法继续扩展了,那么就将其中一个卡片放到另一个机房部署,并且如果某个单元化出现DOWN机的时候,影响面也很小,这种方式的非常灵活无论是水平扩展还是异地多活的部署都可以立刻完成