写点什么

架构师训练营 第四周 命题作业

用户头像
RZC
关注
发布于: 2020 年 07 月 01 日

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。


随着现在技术的演进,单体应用几乎难以支撑我们现在的互联网流量的压力,这时分布式微服务出现在我们所见的任何大型互联网应用系统中。一个系统从单体应用逐渐发展成为集群架构,再慢慢的演变成分布式微服务架构,技术上需要一系列的演进与发展。



前端技术架构:

1.页面静态化:维基百科采用反向代理缓冲服务器来静态化缓存页面,这样用户请求的时候会先从缓冲服务器中搜索有没有对应词条的页面,有的话直接返回给用户。

2.CDN服务器:维基百科、阿里巴巴都使用了CDN服务器。静态的资源分发到位于多个地理位置机房中的服务器上,因此它能很好地解决数据就近访问的问题,也就加快了静态资源的访问速度。

3.图片服务:采用对象存储服务器来存储静态资源,例如图片、文件,然后返回对应资源的访问URL,从而缓解应用服务器的压力。



网关以及应用层架构

1.事务一致性:2PC、TCC、消息中间件

2.消息队列:削峰填谷是消息队列最主要的作用,但是会造成请求处理的延迟。异步处理是提升系统性能。系统功能的解耦。

3.API网关:可以隔离客户端和微服务,从中提供协议转换、安全策略、认证、限流、熔断等功能。使用多路 I/O 复用模型和线程池并发处理,来提升网关性能。API 网关可以替代原本系统中的 Web 层,将 Web 层中的协议转换、认证、限流等功能挪入到 API 网关中,将服务聚合的逻辑下沉到服务层。

4.负载均衡:SLB、Nginx。负载均衡服务是提升系统扩展性和性能的重要组件。

5.注册中心:注册中心可以动态地变更 RPC 服务的节点信息,对于动态扩缩容,故障快速恢复,以及服务的优雅关闭都有重要的意义。



后台架构:

1.数据库主从分离:我们将一个数据库的数据拷贝为一份或者多份,并且写入到其它的数据库服务器中,原始的数据库我们称为主库,主要负责数据的写入,拷贝的目标数据库称为从库,主要负责支持数据查询。

2.分库分表:分库分表是一种常见的将数据分片的方式,它的基本思想是依照某一种策略将数据尽量平均地分配到多个数据库节点或者多个表中。分库分表后,每个节点只保存部分的数据,这样可以有效地减少单个数据库节点和单个数据表中存储的数据量,在解决了数据存储瓶颈的同时也能有效地提升数据查询的性能。

3.分布式系统数据库ID的全局唯一性:使用 Snowflake 算法解决分库分表后数据库 ID 的全局唯一的问题。使用开源的序号生成器。

4.NoSQL:Redis、LevelDB 这样的 KV 存储。这类存储相比于传统的数据库的优势是极高的读写性能,一般对性能有比较高的要求的场景会使用。Hbase、Cassandra 这样的列式存储数据库。这种数据库的特点是数据不像传统数据库以行为单位来存储,而是以列来存储,适用于一些离线数据统计的场景。



运维与安全:

1.异地多活:系统规模发展到一定阶段需要考虑跨地域的分布式系统,同城多机房方案可以允许有跨机房数据写入的发生,但是数据的读取和服务的调用应该尽量保证在同一个机房中。异地多活方案则应该避免跨机房同步的数据写入和读取,采取异步的方式,将数据从一个机房同步到另一个机房。

2.监控与报警:对机器 CPU、内存、磁盘、网络等基础监控,例如:Tomcat 和 Nginx 的访问日志,都是重要的监控日志。你可以通过开源的日志采集工具,将这些日志中的数据发送给监控服务器。

3.降级熔断:在分布式环境下服务器或组件会出现变慢的情况,这样会导致调用者持有的资源无法释放,最终拖累这个服务。因此服务调用方为每一个调用的服务维护一个有限状态机,在这个状态机中会有三种状态:关闭(调用远程服务)、半打开(尝试调用远程服务)和打开(返回错误)。熔断和降级是保证系统稳定性和可用性的重要手段。

4.限流:通过限制到达系统的并发请求数量,保证系统能够正常响应部分用户请求,而对于超过限制的流量,则只能通过拒绝服务的方式保证整体系统的可用性。限流策略一般部署在服务的入口层,比如 API 网关。

5.配置中心:比较出名的有携程开源的 Apollo、百度开源的 Disconf、360 开源的 QConf、Spring Cloud 的组件 Spring Cloud Config 等等。



总结

我们要坚持梳理系统的调用链路来定位系统的瓶颈在哪里,主动地帮助发现问题和思考如何解决问题。每引入一个节点、技术或服务,对于系统整体来说都是变数,都是风险点,怎么权衡利弊收益。



用户头像

RZC

关注

还未添加个人签名 2019.07.25 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 第四周 命题作业