互联网系统数据全流程:
CDN
用户在浏览网站的时候,CDN会选择一个离用户最近的CDN边缘节点来响应用户的请求
(1)CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低;
(2)大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源站的负载。
通常将前端静态代码放置在CDN服务器,利用CDN缓存减轻后台服务器负担,消除不同运营商带来的访问速度的差异,从而达到加快用户访问速度的目的
负载均衡
F5
广域流量负载均衡、高速缓存、Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击等功能。价格比较昂贵。
Nginx
开源软件,采用的反向代理技术能够把来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。
后台服务器架构
由此可以看出软件工程师主要工作:CDN服务器、负载均衡、开发后台应用服务(逻辑、数据库、数据分析等)
目前的应用由于扩展性、成本和敏捷等需要大部分采用微服务架构
微服务示意图
微服务架构需要解决主要问题:
注意:此处负载均衡为客户端负载均衡,以下微服务框架下均可以找到上述问题的解决方案
目前流行的微服务框架:
Vert.x(多语言支持性较差)
异步的微服务tool-kit,事件驱动并且非阻塞的。
Dubbo(单一长连接和NIO异步通讯)
提供高性能和透明化的 RPC 远程服务调用方案(适合于小数据量大并发的服务调用),以及 SOA 服务治理方案
Spring Cloud(HTTP)
为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等
Istio
Isito的多样化功能使我们能够成功、高效地运行分布式微服务体系结构,并提供统一的方式来保护、连接和监控微服务。
Istio属于新兴的微服务概念,主要是实现了sidecar用来方便创建和管理各个微服务
Istio的服务网格示意图:
中间件:
nginx负载均衡
正向代理是客户端向代理发送一个请求并指定目标,然后代理向原始服务器转交请求并将获得的内容返回给客户端
反向代理是供很多客户端都通过它间接访问不同后端服务器上的资源,而不需要知道这些后端服务器的存在,而以为所有资源都来自于这个反向代理服务器
Kafka消息队列
数据持久化在硬盘中,顺序写入硬盘,并且具有灵活的消息过期机制。具有灵活的伸缩性。
速度快:百万每秒
关系型数据库
Mysql、oracle、Sybase等
非关系型数据库
redis、mongoDB、Hbase等
NewSQL(未来的分布式关系型数据库)
数据库分库分表中间件:
sharding-jdbc 、mycat