架构师训练营 - 第四周 - 作业一
题目
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
大型互联网应用系统面对的挑战
在回答方法之前,我们需要首先搞清楚都有哪些问题需要解决。
高并发,大流量
面对高并发,大流量访问。
微信月活用户数10亿+
Google日均PV数35亿
阿里2019年双11当天交易创建峰值 54.4万笔/秒
高可用
系统需要7*24小时不间断服务,宕机事件损失很大。
5·27支付宝大规模宕机事故,对公司造成了很大负面影响
海量数据
需要存储、管理海量数据。
快手每日上传4000万+视频
Facebook每周上传照片数目接近10亿
用户分布广泛,网络情况复杂
服务全球用户,用户分布广泛,所在地网络情况不同。
安全环境恶劣
大型互联网应用容易受到攻击,国内外多个网站出现用户信息泄漏问题。
需求快速变更,发布频繁
为了适应市场,发布频繁,周发布甚至天发布。
渐进式发展
系统是随着市场不断发展而来的,而非最开始就设计出来的。
技术方案
针对上面列出的七大挑战,发展出了以下技术来解决这些问题。
CDN
CDN全称Content Delivery Network,内容分发网络。
通常网站应用会有大量的静态文件 图片、视频等,这些文件体积较大,需要克服 用户分布广泛,网络情况复杂|海量数据 2个挑战。
而通过使用CDN技术,把用户需要访问的内容预存储在用户附近。
举个栗子,假设A市只有一家超市,所有人买东西都要到这家超市,费事费力;优化后在每条街道上设置一个小卖部,小卖部去超市进货,大家买东西只需要去小卖部,这样就方便很多。
业界有很多成熟的第三方服务商,例如 阿里云CDN 腾讯云CDN
HTTPDNS
HTTPDNS,基于HTTP协议的DNS服务,是对传统DNS服务的改良。
网站应用因为需要面对全球用户,需要克服 用户分布广泛,网络情况复杂的问题,需要根据实际情况及时给用户切换合适的机房。
传统DNS服务存在缓存问题、转发问题、更新问题、解析问题。
基于此,开发了HTTPDNS技术,由网站自行决定如何进行机房映射。
反向代理
反向代理,对客户端流量分发,避免单点故障,提升服务可用性。
常用开源方案是 Nginx;此外还有第三方服务商,例如 阿里云SLB
多机房部署
顾名思义,就是服务多机房部署,鸡蛋放在多个篮子里。
虽然当前类似阿里云机房稳定性很高,但是目前为止依然出现过少量的机房故障,导致服务不可用,对于网站来说是不小的损失;所以多机房部署是更为稳妥的方案,提升服务可用性。
分布式存储
单台机器存储存在物理上线,但是数据没有,每天,网站服务都会产生海量的数据;分布式存储就是解决如何多机安全、可靠的存储。
当前较常用的分布式存储方案有Elasticsearch Mongodb TiDB等。
安全认证
网站服务涉及到用户信息、甚至钱,所以安全非常重要,常用的有HTTPS证书加密,甚至SHA来进行非对称加密。
DDD
Domain-Driven Design,领域驱动设计;相比传统的开发模式,DDD提供了一整套方法论来使服务高内聚、低耦合。
重构
随着业务的不断发展,需要定期对架构进行梳理,对于不合理的地方及时重构,避免问题越积越多。
评论