写点什么

架构师训练营第 1 期第 4 周学习总结

用户头像
好吃不贵
关注
发布于: 2020 年 10 月 08 日
架构师训练营第 1 期第 4 周学习总结

本周主要学习了架构的挑战,架构的模式,架构的核心要素,以及wiki的架构,淘宝的架构,初创公司的架构以及组织的演进。

架构的挑战

主要有高并发,高可用,高性能。其中高并发和高性能是软要求,高可用是硬指标,一旦服务器宕机,需要尽快恢复。

架构还需要可伸缩,加入服务器时,尽可能平滑,速度快。可扩展,加入新功能时,代码改动尽量少。安全,核心数据要加密,防止被黑客窃取数据。

扩展的主要方式有两种,一种是垂直伸缩,也就是提高硬件处理性能,一种是水平伸缩,也就是增加服务器数量等。其中垂直伸缩在性能提高和成本提高成线性关系时,还是划算的,但一旦超过某个临界点,性能提高,成本极速上升时,水平伸缩就是更好的选择了。

架构模式

分层架构模式用于横向分层,比如APP下层是DPDK,DPDK下层是linux。分割架构模式用于纵向分层,主要是功能模块的分割,比如DPDK的memory模块,queue模块,poll mode driver模块。分布式部署相同功能的是集群,缓存有助于加快处理速度,比如CDN可以直接返回静态数据,新闻网站的90%内容都可以存在CDN,反向代理可以负载均衡,将数据发到特定服务器去处理,而client是不知道具体是那台服务器处理的。本地缓存的缺点是本服务器的内存空间有限。远程的缓存通过RPC调用,速度慢,但可以存储的数据多。异步模式也用在消息队列中,模块间越少直接联系,越少被彼此影响,可以独立发展。冗余模式可以让数据冗余,防止服务器宕机后,数据丢失。自动化运维对现在的互联网非常有帮助。安全模式可以防止XSS攻击,也就是cross site scripting,将恶意指令放到http中,导致系统出错。

wiki的架构



系统的数据流分为HTTP,MySQL, NFS, MemCached, DNS, HTCP等。

缓存

离用户最近的是Squid caching层,也是类似nginx的反向代理,用户数据如果在Squid有,就不需要到后面去取了。

数据库也有自己的缓存,Memcached,是一种分布式对象缓存。

数据库读写分离

通过主从复制实现,主数据库写,从数据库读。

负载均衡

LVS是负载均衡,目前通过Round-Robin DNS的方式来达成。

集群

使用了Mysql数据库集群。

动静分离

图片服务器和动态数据分离,也是一种CDN(内容分发网络)的实现方式。减少了大量数据的传输。

访问流程

首先经过GeoDNS,将用户的域名解析成IP地址,是离用户地理位置最近的机房的负载均衡服务器的IP地址。请求到PHP服务器,先看Memcached中是否有需要的数据,有的话,构建成页面,返回给用户。没有的话,再到MySQL查找。搜索通过搜索服务器Lucene来返回用户需要的内容。Invalidation notification,通知缓存内容失效。有人通过PHP编辑了wiki的内容,会把内容写入数据库,再通过Invalidation notification通知缓存失效。



图片为2020年看到的最新框图,前端cache为Varnish,后端cache为ATS,经过cache后,应用服务器有Nginx。

横向可以分为Edge cluster层,Core cluster层,以及Core cluster(Primary)层,里面的JobQueue用到了异步的方式,EventGate传给Kafka。



注:如有侵权,请联系作者删除。

用户头像

好吃不贵

关注

还未添加个人签名 2018.11.20 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期第 4 周学习总结