优秀架构师修成之路( 四 )


上述四种思维,往往在架构设计中是融合使用的,需要根据业务或者系统的需求来选择侧重思维方式 。
单元化架构,微服务架构以及 Serveless 架构单元化架构
1. 单元化是什么单元化架构是从并行计算领域发展而来 。在分布式服务设计领域,一个单元(Cell)就是满足某个分区所有业务操作的自包含的安装 。而一个分区(Shard),则是整体数据集的一个子集,如果你用尾号来划分用户,那同样尾号的那部分用户就可以认为是一个分区 。单元化就是将一个服务设计改造让其符合单元特征的过程 。

优秀架构师修成之路

文章插图
单元化架构,为什么要用以及我们如何做到
图 1 :洋葱细胞的显微镜截图,单元化要达到的目的就是让每个单元像细胞一样独立工作
在传统的服务化架构下(如下图),服务是分层的,每一层使用不同的分区算法,每一层都有不同数量的节点,上层节点随机选择下层节点 。当然这个随机是比较而言的 。
优秀架构师修成之路

文章插图
单元化架构,为什么要用以及我们如何做到
图 2 :传统的服务化架构,为伸缩性设计,上层节点随机选择下层节点
与其不同的是,在单元化架构下,服务虽然分层划分,但每个单元自成一体 。按照层次来讲的话,所有层使用相同的分区算法,每一层都有相同数量的节点,上层节点也会访问指定的下层节点 。因为他们已经在一起 。
优秀架构师修成之路

文章插图
单元化架构,为什么要用以及我们如何做到
图 3 :单元化架构,为性能和隔离性而设计,上层节点访问指定下层节点
2. 为什么要用单元化在性能追求和成本限制的情况下,我们需要找到一种合适的方法来满足服务需求 。在传统的分布式服务设计,我们考虑的更多是每个服务的可伸缩性,当各个服务独立设计时你就要在每一层进行伸缩性的考虑 。这是服务化设计(SOA)流行的原因,我们需要每个服务能够单独水平扩展 。
但是在摩尔定律下,随着硬件的不断升级,计算机硬件能力已经越来越强,CPU 越来越快,内存越来越大,网络越来越宽 。这让我们看到了在单台机器上垂直扩展的机会 。尤其是当你遇到一个性能要求和容量增长可以预期的业务,单元化给我们提供另外的机会,让我们可以有效降低资源的使用,提供更高性能的服务 。
总体而言,更高性能更低成本是我们的主要目标,而经过单元化改造,我们得以用更少(约二分之一)的机器,获得了比原来更高(接近百倍)的性能 。性能的提升很大部分原因在于服务的本地化,而服务的集成部署又进一步降低了资源的使用 。
当然除了性能收益,如果你做到了,你会发现还有很多收益,比如更好的隔离性,包括请求隔离和资源隔离,比如更友好的升级,产品可以灰度发布等 。单元化改造后对高峰的应对以及扩容方式等问题,各位可以参考#微博春节技术保障系列#中的单元化架构文章,也不在此一一赘述 。
3. 我们如何做到此次单元化改造基于微博现有的业务,因此这里也先行介绍一下 。粉丝服务平台是微博的内容推送系统(代号 Castalia),可为 V 用户提供向其粉丝推送高质量内容的高速通道(单元化之后已到达百万条每秒) 。整个服务涉及用户筛选、发送计费、屏蔽检查、限流控制和消息群发等多个子服务 。由于改造思想相通,这里以用户筛选和消息群发两个服务为例,下面两图分别为商业群发在服务化思想和单元化思想下不同的架构 。
优秀架构师修成之路

文章插图
 
图 4: 服务化思想下的商业群发架构设计(旧版)
优秀架构师修成之路

文章插图
 
图 5 :商业群发在单元化思想下的架构设计(新版)
对于筛选服务,在服务化架构里,需要去粉丝服务获取粉丝关系,然后去特征服务进行用户特征筛选,最后将筛选结果传输到群发服务器上;而在单元化架构里,粉丝关系直接就在本地文件中,用户特征服务也在本地,最后的筛选结果再不需要传输 。服务本地化(粉丝关系和用户特征存储)减去了网络开销,降低了服务延时,还同时提高了访问速度和稳定性,而筛选结果本地存储又进一步节省了带宽并降低了延迟 。以百万粉丝为例,每次网络操作的减少节省带宽 8M 左右,延时也从 400ms 降为 0 。


推荐阅读