架构师训练营 - 命题作业 第 4 周
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
答:
1、GeoDNS:跨地域的域名解析服务;
功能:根据用户所在地域,返回该地域的域名 IP;
解决的问题:让用户就近访问服务,减少网络损耗。
2、负载均衡:服务横向扩展方案,比如 LVS、HaProxy、Nginx 或者最简单的 DNS 轮询。
功能:后端有多台服务器提供服务,通过负载均衡,让用户的访问根据一定的访问策略,均匀的落到不同的服务器上。
解决的问题:降低单台服务器的压力,提升响应速度,对于 LVS、Nginx 等,还可以做到故障检测和转移。
3、CDN:内容分发网络;
功能:在不同的地域部署内容缓存服务器,然后根据用户所在地域,就近返回请求数据;
解决的问题:用户可以就近获取请求数据,避免了网络堵塞或链路过长等问题带来的请求慢或失败。
4、数据库读写分离:
功能:一台用于业务写入的主数据库服务器,多台用于业务读取的从数据库服务器;
解决的问题:单台数据库读写压力过大的问题,主数据库做写入保障,不至于因为读压力造成写入失败,另外提供多台从数据库,可以横向扩展,分散读取压力。
需要注意的是:至少要 2 台以上的数据库用于读取,因为每台数据库都会有 100%的写压力。
5、消息中间件:
功能:提供接收生产者消息,并提供消息队列的订阅推送功能,以及消息的可靠性保障;
解决的问题:
1、多个服务之间的业务解耦,避免服务相互依赖太紧密,造成业务维护困难;
2、削峰:通过 Qos 流量控制,避免突发业务请求,造成下游压力从而崩溃;
3、异步处理:对于用户不关注的业务,通过消息异步处理,然后快速返回,避免用户等待。
6、Redis 分布式缓存:
功能:提供统一的内存缓存服务;
解决的问题:确保多台服务器的缓存一致性,如果使用内存缓存,可能多台服务器缓存会出现差异,从而导致请求前后 2 次不一致。
7、分布式部署:
功能:根据业务不同,拆分出不同的项目进行开发和分别部署,对外提供服务;
解决的问题:模块化、微服务化,方便维护和可扩展。
8、全文检索:
功能:提供统一的数据采集和搜索服务,比如 ES
解决的问题:海量数据的查找性能低下,查询结果不够丰富的问题。
9、DevOps:
功能:自动化的配置、部署、测试、运维一整套工具和流程管理。
解决的问题:大规模服务的统一配置管理、统一的发布和自动化测试、运维工具,避免人工操作失误的可能,同时包括安全测试、冒烟测试等。
10、分布式事务:
功能:在多服务的运行时,保障原子性事务操作的技术能力;
解决的问题:分布式部署过程中,一些原子性事务要求的操作,比如订机票,需要支出、到账、出票、出保险这 4 个事务,要么全完成,要么都不操作。
11、分布式锁:
功能:对一些冲突资源的操作顺序保障;
解决的问题:分布式部署过程中,要对一些有冲突的资源加锁操作,比如秒杀,要保障不会出现超卖和少卖的问题,需要分布式锁的支持。
12、数据挖掘和推荐:
功能:完成海量数据的分析和标签管理;
解决的问题:分析用户习惯,推荐关联数据,比如 ITEM CF 基于物品的推荐,USER CF 基于用户的推荐等。
版权声明: 本文为 InfoQ 作者【水边】的原创文章。
原文链接:【http://xie.infoq.cn/article/f6c092a8dce04e025618ddc47】。文章转载请联系作者。
评论