架构师训练营第四周
系统架构:当用户数量达到了一个巨大的数量,如何取得高并发?
两个技术方向:
垂直伸缩 (到达某个程度之后单元花费增加,有物理极限)
水平伸缩 (增加服务器增加计算能力的架构方法,没有极限)

根据具体的情况,具体分析。比如数据库撑不住的,可以先买个更好的数据库服务器先顶一会。(虽然不是主流的技术方案,但还是可以考虑)
架构演化的阶段
演化1: 应用数据分离 (水平伸缩)
演化2: 用缓存改善系统性能
绝大多数互联网都是读操作,所以可以用缓存减轻互联网的压力。
演化3: 通过使用负载均衡调度服务器,使用应用服务器集群改善系统的并发处理能力
水平添加服务器。
演化4: 数据库读写分离
针对写操作,缓存有时效的问题。数据库一般是架构里最脆弱的部分。可以一主多从的复制。通过主从复制/主主复制 产生多个备份。
比较:主从复制 VS 主主复制

If the master goes offline, the system can continue to operate in read-only mode until a slave is promoted to a master or a new master is provisioned.

Both masters serve reads and write and coordinate with each other on writes. If either master goes down, the system can continue to operate with both reads and writes.
演化5: 使用反向代理和CDN加速网站相应
CDN服务器
CDN是缓存服务,缓存一些热门的静态的资源。这些静态资源例如图片是很大。让用户可以就近获得这些缓存的资源。
反向代理服务器
定义: A reverse proxy server is a type of proxy server that typically sits behind the firewall in a private network and directs client requests to the appropriate backend server. A reverse proxy provides an additional level of abstraction and control to ensure the smooth flow of network traffic between clients and servers.
反向代理服务器的应用:
负载均衡
缓存常访问的内容(有缓存,直接返回)
安全 拦截安全攻击
演化6: 使用分布式文件系统和分布式数据库系统
演化7: 使用NoSQL和搜索引擎
演化8: 业务拆分
每个页面,每个功能都可以拆分成一个系统,然后通过URL调用。每个系统由一个团队维护,部署在一个集群上。
演化9: 微服务及中台化
服务是可复用的,业务直接包装一下这些服务即可。
演化10: 大数据与智能化
架构模式
分层
E.g. 网关层,微服务层,基础设施层
分割
分布式 (分层,分割完了部署在不同的服务器)
集群 (多台服务器部署相同的应用构成一个集群)
缓存
异步 (将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法协作)消息队列是主要解决方法。
冗余
自动化
架构要素
高性能
高可用
可伸缩 (通过不断向集群里加入服务器来缓解不断上升的用户并发访问压力和数据储存需求)
可扩展 (增加新的业务;主要手段是分布式服务,事件驱动架构,中台)
安全
案例学习
维基百科

GeoDNS通过域名解析返回就近的LVS load balancer的ip地址,Squid反向代理服务器检查有没有缓存这个词条的内容,如果有直接返回。
如何解决写操作导致缓存不一致?
Memcached是过期失效。
Invalidation notification可以通知缓存的对应词条失效。(直接删除缓存)
因为业务逻辑比较简单,所以上面比较简单的系统就可以支持极大的并发。
评论