rooobot / architecture-training

Architecture training camp homework
0 stars 2 forks source link

架构师训练营-第四周总结 #10

Open rooobot opened 4 years ago

rooobot commented 4 years ago

老师本周的两次课主要是围绕着互联网的架构特点来讲解,并且结合了几个案例。

与传统的网站架构所不同的是,互联网架构的特点是高并发、大流量,这就要求互联网架构必须要始终围绕着以高可用为目标去建设。而在这个过程中,又要应对种个环节所面对的不同的问题,比如海量数据的存储、多数据中心建设、系统安全性、需求变更快速发布频繁等问题。

架构永远是演进的,从monolithic单体架构不断的演进到服务化的分布式架构,这个过程也始终是围绕着高可用为目标演进的。

演进的过程从一开始的垂直伸缩到后面的水平伸缩也都是为了解决可用性的问题。

具体的手段从分层架构到垂直拆分,再到分布式、集群、各种缓存、异步处理,以及冗余部署、自动化运维等不断的进化。

总结了互联网系统架构核心要素:高性能、高可用、可伸缩、可扩展、安全性。

并总结了互联网架构:

然后,结合淘宝网的发展、维基百科、宅米网和微博作为案例,讲解了这些网站的架构演进之路。

以上是本周课程内容的总结。

对于互联网的架构,我个人觉得一切都是以高可用为中心进行展开的,看看互联网应用的特点:高并发、大流量、海量数据,这三个特点无论哪一个都会对系统的可用性造成很大的威胁,所以,我个人以为互联网架构的核心就是高可用,否则,服务都不可用了,还谈啥服务呢?

基于高可用的角度去理解互联网的架构(或是架构演进之路),一切也就简单清晰明了了。

为什么维基百科要用GeoDNS

因为它建设了三个数据中心,用户请求时,先通过用户的IP位置分析,判断将用户分配到哪个数据中心可以提供最好的服务。建多个数据中心本向就是为了高可用,将用户按地理位置进行分流来提供更高的可用性。

为什么使用DNS

DNS本身就是一种加速缓存,它的特点就是通过多节点以副本的方式来存储一次静态的资源,同样,在用户请求网站的静态资源时,通过对用户IP的分析,来找出离用户最近的DNS节点,然后再将用户的请求分发到最近的节点上去请求内容。DNS的多节点本身也是为了高可用,静态资源一般都比较大,且不易变化,将用户对静态资源的请求通过DNS的多节点来进行分流,本质上也是为了提高可用性。

为什么使用负载均衡?

一般负载均衡服务器后面对应的都是一组或多组相同的服务,每组服务都由若干台提供相同服务的实例组成。负载均衡负责将来断进来的用户请求按照设定的负载均衡算法来分配到不同的实例,以此来保障每台服务器都能均摊一部分用户的请求,当服务实例不够时,可以动态的增加更多的实例来进行均摊;这也是为了提高服务的可用性。

为什么使用分布式缓存?

为了减少请求对DB的访问次数,除了提升访问的速度,还可以避免请求对数据库造成的访问压力导致数据库不可用,也是为了提高服务的可用性。

为什么使用消息队列?

流量销峰、流控、异步化请求,这些都是为了降低同一时间对系统的请求压力,也是为了提高服务的可用性。

为什么要读写分离?

将关系数据库的读实例与写实例分开,也是为了避免对所有的请求都发送到主库,造成主库的可用性问题,本质上还是为了提高可用性。

在互联网架构设计的每个点了,高可用是首先必须要考虑的点,但是,并不是说互联网应用系统只有高可用,我想表达的意思是,高可用是一个核心的目标,我们可以通过其它的一些手段围绕着高可用为目标去做好高可用架构的设计。

比如,使用注册中心来对内部服务进行注册和发现,同时,服务内部结合本地缓存来进一步保证服务的可用性;使用配置中心来将一些可动态配置的信息通过配置中心来统一管理,方便服务的弹性伸缩,新功能的灰度发布等;使用服务治理中心来对所有的服务进行熔断、限流和降级的管理等。

高可用始终占据着互联网应用架构设计的核心目标。