架构师训练营第四周课后作业
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
大型的互联网应用系统主要面临了高性能、高可用、可扩展和安全这四方面的的要求,正是因为这些要求,所以我们通常可以采用一些技术手段来解决这些问题。
高性能
互联网应用会面临无法预测的并发请求,传统的应用系统通常无法承受这样的数据访问量,我们会采取以下手段来解决
1.水平扩展
水平扩展是指在单台服务器无法承担系统性能要求时,可以采用水平扩容多台服务器搭建集群,前置一个负载均衡来解决单台性能不足的问题。这里需要注意如果是无状态服务,那么负载均衡出这有多种方式来处理均衡分发请求的方式(轮询、最小负荷等),如果是有状态服务,那么则需要根据请求来源做一定规则匹配到同一台服务器来处理。除了对提供应用服务的服务器做水平扩展形成集群,本身负载均衡也可以实现多机集群扩展。
2.缓存
应用系统中的数据大部分都保留在数据库中,而数据库中的数据都存在于磁盘上,当大量请求进入到数据库中,那么会造成磁盘 I/O 的瓶颈。使用缓存就是把常用的热点数据放到内存中,减少对数据库的大量请求。缓存一般也分成本地缓存和远程集群缓存,由于我们的应用服务也是集群化,所以也推荐把缓存做远程集群,通过网络方式获取缓存数据。目前比较热门的方案是使用 Redis 来做缓存。
3.读写分离
数据库通常来说都是大型互联网应用系统中的性能瓶颈,在许多场景下,我们可以通过做数据库主从的方式把对数据的操作做读写分离,让写操作连接主数据库,读操作连接从数据库,这样保证在读多写少的场景,降低对主数据库的压力。
4.内容分发网络(CDN)
互联网应用的请求来自于世界各地,如何把用户需要的数据或内容放在离用户网络最近的地方以减少网络延迟,这就是 CDN 要做的事情。通过对内容动静分离,把静态资源放到 CDN 服务中,用户的网络接入运营商在请求静态资源时,自动从 CDN 中获取,无需走长链路到我们的应用系统中返回内容,一方面减少了我们的系统负荷,另一方面减少了网络时延提高了性能。
5.搜索引擎
部分互联网应用需要用到全文检索功能,这在一般的关系型数据库中没有办法高效处理这样的业务,所以需要用到 elasticsearch 这样的搜索引擎来进行数据检索定位,然后再回到数据库中查找相应的数据。
高可用
由于互联网应用面向了广泛的用户,所以要求我们的系统需要达到 7x24 的高可用,而一般实现高可用的做法就是冗余。
1.集群
类似水平扩展,就是对关键服务做冗余,多台服务器形成集群对外提供服务,当集群中的某台服务器宕机,需要通过一定的检测机制把故障服务器从集群中剔除,同时更新我们前端负载均衡的服务路由表。这里就考验我们对服务网关或是微服务架构的设计,需要对服务做熔断和限流,保证我们整体系统的健壮性。
2.多数据中心 &异地容灾
在物理上,我们需要把服务器部署在多个主干网上,当突发事故时,其他数据中心可以及时承担其他数据中心失效的流量。同时我们的存储也要保证一定量的异地备份。虽然故障发生时,我们部分数据中心的数据无法访问,但是不至于全量数据都不可用。
可扩展
互联网应用的迭代和需求变化非常快,有时候新版本还没有发布,就因为一些内测过程直接要求重构。所以我们设计的架构一定要尽可能满足高内聚、低耦合,同时要易于扩展。
1.微服务和中台化
目前流行的微服务在大型互联网应用中风生水起,就是在需求快速变化时,我们可以很好的把公共的服务单独做成微服务提供,减少每个系统中重复开发和维护,提高应用的开发效率。
2.消息中间件
为了减少不同服务之间的耦合,我们使用消息中间件的方式来实现异步调用和服务依赖,同时在开发过程中也互不影响。
安全性
互联网应用中的数据都是有价值的资产,也是用户的资产。在设计架构的时需要充分考虑到安全性。
1.网络隔离
我们的应用通常会实现多级的反向代理,在系统的边缘会暴露出公网的负载均衡服务,而后端的服务器我们通常并不暴露公网地址,通过反向代理来访问。
2.防火墙
对于部分端口或异常流量做监控,识别出异常攻击需要封禁请求 IP,同时保证我们内部应用之间实践最低可用权限原则,不要粗放使用管理员权限。
版权声明: 本文为 InfoQ 作者【Gosling】的原创文章。
原文链接:【http://xie.infoq.cn/article/a450814e5d28b6da3bf7e0f45】。文章转载请联系作者。
评论