互联网软件架构设计的思考

互联网软件架构

 

互联网软件通常是指在万维网上搭建的站点平台,其用户基数大且增长迅速。在其架构设计时,需要考虑高并发和高可用性。通用的互联网架构设计中需要的关注点。
高并发:
高并发是指在系统能够并行处理多个请求,其相关的指标有响应时间、吞吐量、QPS、并发用户数等。

响应时间:系统对请求作出的响应时间。
吞吐量:单位时间内系统可以处理的请求数。
QPS(Query Per Second):每秒响应的请求数目。
并发用户数:同时承载正常使用系统功能的用户数目。

要实现系统的高并发,通常可以采用垂直扩展和水平扩展两种方式。垂直扩展可以通过提升单机服务器的性能,包括CPU、带宽、内存、硬盘等;也可以通过对软件进行优化,引入缓存、使用异步、减少锁竞争、参数调优等方式实现。但是对于单机来说,性能总是有极限的。因此最终还是需要水平扩展来实现。
水平扩展理论上可以通过增加服务器的数目来线性扩充系统的性能。
在互联网领域,系统架构会包括反向代理层、站点应用层、服务层、缓存和数据库持久层。在各层之间都有比较成熟的解决方案实现水平扩展功能。

反向代理层的水平扩展:DNS轮询。
站点应用层的水平扩展:反向代理实现
服务层的水平扩展:通过rpc框架实现,核心是连接池
数据层的水平扩展:通过数据库中间件实现,有几种方式。range、hash、路由

高可用性:
高可用是指通过设计减少系统不可用的时间。在互联网上有很多公司的目标是4个9。
高可用的核心是冗余,此外还需要实现“自动故障转移”。
如何保证互联网中各层的高可用:


反向代理层:通过keepalived存活检测,相同虚拟ip提供服务。
站点层:反向代理自动实现
服务层:rpc框架自动实现。服务连接池来进行处理。保证服务是无状态的。
缓存层:没比较,miss就miss。主从备份,会涉及到数据迁移以及一致性。哨兵。设多个缓存,一个挂了存到另一个。
数据库层:一般都是主从同步,读写分离。读库高可用和写库高可用。读写分离就涉及到一致性的问题,在一致性同步期间可强制读取写库。读库的高可用,多台读库,采用数据库连接池。 写库的高可用,采用主备的形式,shadow机器时刻准备着。

猜你喜欢

转载自blog.csdn.net/lusic01/article/details/87940003