架构本质总结(二)

本来计划写作不是日更的,但是既然能有时间来写,那就坚持日更吧。加油!

上一篇文中,总结了下架构的本质和目的,以及架构演化原则最普适的手段:。今天就字来看,我了解的架构到底是怎么来拆的。

梳理

在我理解中,程序=计算+数据,也就是说我们的系统组成部分要么承担的是数据存储,要么承担的就是程序计算或者是业务逻辑编排。

因此以我的总结来说,引起我们架构演化的核心就是提示业务的处理能力或者提高数据的存储能力

下面,本文就先从处理能力瓶颈来描述,从最原始的单体单机部署的应用来一步步梳理引起系统需要拆分的原因以及如何实现。原始设计如下:

单体单机设计.png

第一步、冗余应用服务

在这个架构下,最容易出现能力瓶颈的是Process的处理能力,次时,我们需要做的就是将Process冗余部署来分担请求。这时,我们实施的就是拆分请求,将原来落到一个Process的请求,拆分到多个Process。

要实现应用可以冗余部署,这时架构要保证的是以下两点:

  • 应用服务是无状态的(对等),这样我们才可以水平的扩容。
  • 扩容后,需要在Process前置一个负载均衡系统来实现请求的分发。
单体冗余设计.png

第二步、数据读写分离

在上一步完成后,我们的Process的处理能力就暂时不是能力瓶颈了,但是系统中的数据库却仍是单点的,若流量进一步提升,数据库的存储能力就成为新的瓶颈。

这时候,个人认为最有效最快速的方式就是读写分离。从二八法则来看,一般一个系统有八成的请求都是读请求,在读请求中,一般有较大一部分的请求是对数据一致性没有强制要求的。这时,我们实施的仍然是拆分请求,将读写请求拆分到主和从库。

读写分离后解决的最大问题就是,主库只要负责写请求以及部分强一致性的读。而读请求就可以使用加从库的方式来横向扩容。


主从设计.png

第三步、数据缓存

系统做了读写分离后,大部分的系统都能支撑比较长的时间了。下一步,我们更多可以考虑的是能否进一步的减小数据库请求。这时,就可以根据具体的业务来将实时性要求不高数据提炼到离用户更近的地方。

而内存相比数据库的文件来说,是更加靠近用户的,性能也是更高的。因此就可以将数据缓存到Reids等第三方缓存系统,或者将数据缓存到Process的内存中(要解决一致性问题),甚至将数据缓存到机器外部缓存(CDN)。此时,我们实施的其实还是拆分请求,将请求分别拆分到缓存和数据库。

缓存设计.png

第四步、MQ异步化

上述两步解决的跟多的是读请求的拆分,而写请求,仍然是单机的数据库。当数据库出现写压力后,我们除了拆库之外,还有什么手段能提升数据库的处理能力呢?

这时候,我们可以引入消息中间件(MQ)来进行流量的削峰。简单来说MQ能实现写性能提升是因为将对数据库的随机访问变为串行化访问,我们就可以将没有强一致性要求的写请求都先发送到MQ,有订阅线程持续消费处理。此时,我们实施的依旧是拆分请求,只不过拆分的是写请求。

MQ设计.png

第五步、数据库拆分

假设我们经过上述四步后,服务的性能仍旧无法解决,我们需要考虑的就是要进行数据的拆分了。当服务量和写请求量上来后,数据库单机的瓶颈就是一个必须解决的问题了。

通过拆分数据,从而最终达到的还是拆分请求的目的。

数据库拆分的好处和问题就不多说了,顺便说下个人了解到的比较常用的两种分库路由策略:

  1. id取模,扩容时双倍扩容,可以避免数据迁移和停机。
  2. 基因法,比如将用户和用户的商品路由到同一个数据库,从而避免跨库关联。

第六步、限流降级和熔断

有时,系统需要应对突发的流量激增场景,这时候,无限的扩容服务或数据就不是合适的解决方案了。这时候,我们要做的更多的时保护我们的系统仍然能服务部分用户。

为了保护我们的系统服务,我们要做的就是入口做限流,服务内部做降级,以及对下游服务做熔断。

通过上述三种手段,我们做到了拆分请求,将重要的请求留下,不重要的请求延迟或不处理。

梳理的可能条理不是很清楚,后续再来整理一下吧。

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