可扩展系统就得这么设计

前面分享了高并发系统(高并发系统设计)以及高可用系统(高可用系统)的解决方案,今天我们再来看另一个很重要的模块,可扩展系统,系统的可扩展性同样是架构所需要重点考虑的一个设计点。

顾名思义,可扩展即是通过增加相应的机器来达到抗住系统的突然流量激增的目的。所以,今天我们来看看该怎么设计一个可扩展的系统,目的是,在公司运营突然大促或者我们应用曝光量更火爆的时候,我们能够从容的端着咖啡去应对,而不是被产品逼着问服务怎么又停了。 

1,增加机器真的简单吗

我们有时在项目架构评审的时候,有些同学提到的最多的就是,我们服务要多部署几台服务器吧,万一扛不住线上并发咋办。提到这个的问题证明出发点是好的,是想将服务后续能支持横向扩展。其实,我们在设计可扩展系统或者服务时不能只靠自己经验和直觉的,而是要站在我们系统的本身以及预估后续系统持续变化点。比如,我们之前有个酒店预订的系统,一直运行的很稳定,有一次的大节假日,流量突然增加到了10倍,我们的MySQL从库达到了读瓶颈,最后通过扩展从库解决查询慢的问题。

之所以提到这个小案例,是想告诉大家,作为架构师的你不要只看应用级别的扩展,要有整个全局的扩展思路。

那么,是不是通过多加机器就一定能解决流量激增的问题呢?答案是否定的,像上面提到的,其实数据库层面也达到了瓶颈,再比如咱们本来一台机器带宽是50Mbps,现在服务扩展了多台后整个集群达到了千兆级别,但是,其实瓶颈是在负载均衡层,因为咱们目前负载均衡层只支持千兆以内的带宽。因此,我们在设计扩展系统时要分析各个瓶颈点,然后再去对应的去扩展,不仅是业务块,应该还有数据库、缓存、负载均衡等等。

2,如何设计

分而治之,是目前设计可扩展系统比较流行也是经过市场检验的一种比较优雅的方式。通过将我们复杂的系统进行合理化拆分成各个小而简单的服务模块,从而对其分析进行各自扩展。

一,存储扩展

还是拿我们之前的酒店预订系统为例,我们在存储层扩展首先是按照基础业务进行拆分的,大体拆为用户库、运营库、权益库、基础数据库、订单库等,具体的酒店这些基础数据就放在基础数据库中,这样拆分还有个好处就是确保了故障的隔离,其中一个挂了不会影响其他的数据,由于业务的高速发展,我们这种基于业务的拆分已经到了部分库的单机瓶颈了,所以,此时要基于数据本身进行扩展,这里假如我们订单库达到瓶颈了,我们可以考虑增加订单库节点来扩展,但是存储层的扩展不能简单的增加节点,而是要考虑长远,一次性分配多个节点点来达到后面的扩展。这里会涉及到分库分表专题,敬请期待。

二、业务层扩展

在考虑业务层扩展这块,我们一般基于三个方向,业务方向、重要性方向、请求来源方向

番外:如果对于底层代码想研究,可以去作者wx号:架构师修炼,发送soa,则会推送soa分布式源码脚手架,拿走不谢

业务方向

我们基于业务进行拆分后行成各种业务池(理解为集群),比如,我们上面的酒店预订被拆为用户池、搜索池、酒店详情池、基础数据服务池、运营池、订单池等等。每个池对应着自己的数据库

从上图可看出,我们针对各个基础业务进行拆分,然后哪个池达到了瓶颈我们就横向扩展哪一个就行了,简单而不粗暴。

重要性方向

重要性是指将一些重要的服务也就是不能影响我们系统主流程服务放在一起,将一些可以妥协的服务放在一起形成非重要性服务池,为什么要这么设计扩展性呢?是因为,当我们系统面临突然流量激增的时候比如秒杀假期大促等,可以适当的去将非重要性的服务进行降级,从而保重主流程的正常运作。比如我们酒店预订中就可以将运营和相关权益政策服务进行降级,不去请求他们,从而让我们整个系统能保证用户能搜到和订到酒店。

请求来源方向

请求来源是指我们系统被哪些端访问,APP端、网页端、小程序或者公众号等,将这些进行归类进行独立提供服务,还得上面酒店预订系统为例,提供了APP端服务、H5端服务、内部调用服务。

总结,今天我分享了可扩展是架构必须要考虑的设计点,以及可扩展设计并不能一味的只考虑服务层的扩展,要全局的把控,同时后面讲到了我们通过拆分的方法论进行如何优雅的进行设计系统的可扩展。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容

  • 一、生命周期 一个事物一旦出生,就必然会长大,变异,一旦长大,就面临着衰老,接下来就是消亡了,这个过程就称为一个事...
    ZyBlog阅读 2,647评论 1 11
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,081评论 1 32
  • 目录 ·大型网站软件系统的特点 ·大型网站架构演化发展历程 ·初始阶段的网站架构 ·需求/解决问题 ·架构 ·应用...
    zhyang0918阅读 2,621评论 0 16
  • 他是容白上仙,而我浅末不过是一户普通人家的修仙女。 五年前,我第一次见他,那惊鸿一瞥,便永远都忘不了。 得知...
    浮梦芳华阅读 148评论 0 0
  • 也许我们每个人都有迷茫 不知所措的时候,也许你正在经历这种“非常时期”. 我现在就很迷茫,不知所措,不知道以后的日...
    笔名卤皖阅读 197评论 0 0