有分布式和高并发经验者优先

有很多人问我,我也问过很多人:

1
你有过千万级别访问量的经验吗? 有高并发的经验吗?

很多招聘信息里,也经常出现这样的字眼

1
有高并发高流量经验者优先,有分布式经验者优先

我问的和问我的 回答都很一致 没有!

真正搭建过分布式和处理高并发的人凤毛麟角,一般都是规模比较大的公司的技术总监或者架构师才会遇到,小公司根本不需要,也开不起这个价钱。

好了,废话少说了,我说说我心目中的高并发架构吧。

主要是5个方面

1,DNS + CDN缓存
2,系统拆分
3,数据库缓存
4,MQ (RabbitMQ)
5, 分库分表
6,主从数据库,读写分离
7,ES (ElasticSearch)

我们先举个生活中常见的例子,以吃为例,比如海底捞。
海底捞就相当于一个高并发高流量的产品,有亿万人去用餐。
首先海底捞全国有几百家分店,每个城市有几十家分店。这就是分布式。如果只有一家店的话 那几亿人进去立马奔溃。

1,你肯定去离你最近的店去就餐,而不是几亿人都在同一家店就餐,那生意没法做了。这里就用到了DNS,就近分配,连接离你最近的节点。你可能经常去你熟悉的那一家店去就餐,而不是随机去某一家店,这就用到了CDN缓存。

2,海底捞除了店里就餐,还有外卖,外卖是不占用店里的位置的。
这里就用到了系统拆分,分流,降了一些流量。

3,好了,你终于进来了准备点餐了。菜单上的菜品就是数据表数据。
你点了一瓶加多宝 和 招牌虾滑 和 炒牛肉。
加多宝立马就送过来了,这就相当于是数据库缓存,到处都有,随时可以拿。
招牌虾滑估计要等一会,这个厨房里应该已经配好了,需要分配下,相当于读操作,直接送过来,不需要花太多时间。
而炒牛肉要等半个小时才送来,这需要定做,相当于写操作,是异步排序后通知厨师去做,一个厨师相当于一个数据库管理员,海底捞这种级别的 肯定不止一个厨师 而是几十个厨师,相当于分库分表。
做完后,再按顺序返回给你(端到你桌位上)。因为我们不是直接跟厨师下命令叫他做,而是通过服务员或者app里提交订单,再分配给厨师,这里的服务器或者app就相当于是MQ,异步通知。

说到这里 我们大概清楚了 分布式和高并发到底是怎么一回事。

现在回到技术上来,以网站为例,比如facebook。

高并发系统架构

这样基本上就清晰了,其实架构设计大同小异。最核心的是数据同步,要稳定,不能出错。
针对上面海底捞的例子,就是菜不能上错,也不能等了一个小时一直没回应。
还要对各个环节业务功能了如指掌,出问题后,得知道是哪个环节出了问题,怎么去修改和调试。而不是盲目的乱搞一通。

最后,改提一下宇宙最强购物车系统magento了。
现在magento2支持MQ/ES/分库/主从数据库了。

1,安装配置MQ见 https://devdocs.magento.com/guides/v2.3/install-gde/prereq/install-rabbitmq.html

2, 安装配置ES见 https://devdocs.magento.com/guides/v2.3/config-guide/elasticsearch/es-overview.html

3,分库(仅商业版支持) 见 https://devdocs.magento.com/guides/v2.3/config-guide/multi-master/multi-master.html

4,主从数据库
开源版仅支持一个主数据库,商业版使用三个主数据库和一个可配置数量的从数据库进行复制。
主要是把checkout和sales这2部分拆出来了,也就是前台加入购物车下单和订单管理两部分独立拆分出来各作为一个数据库。

坚持原创技术分享,您的支持将鼓励我继续创作!