大型网站系统架构
dubbo+ssh+nginx负载均衡/动静分离+数据库主从+缓存+分布式存储+队列
1、缓存--利用缓存改善网站性能
a.缓存包含本地缓存和分布式缓存;本地缓存如OSCache,分布式缓存如Memcached、Redis。
b.本地缓存和分布式缓存的特点
本地缓存的特点是速度快,但是本地空间有限所以缓存数据量也有限。
分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,响应速度没有本地缓存快。
2、服务器集群--使用服务器集群改善应用服务器性能
应用服务器作为网站的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数。应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。
常用的负载均衡技术硬件的有F5,软件的有LVS、Nginx、HAProxy。
F5:价格比较贵;
LVS:四层负载均衡,根据目标地址和端口选择内部服务器
Nginx:七层负载均衡
HAProxy:支持四层、七层负载均衡,可以根据报文内容选择内部服务器
因此LVS分发路径优于Nginx和HAProxy,性能要高些,而Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)。
3、数据库读写分离和分库分表
随着用户量的增加,数据库成为最大的瓶颈,改善数据库性能常用的手段是进行读写分离以及分表。
读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。
分库分表则分为水平切分和垂直切分,水平切换则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务不同来切换,如用户业务、商品业务相关的表放在不同的数据库中。
4、CDN、反向代理--使用CDN和反向代理(nginx)提高网站性能
5、使用分布式文件系统
6、SOA服务化(dubbo)--将应用服务器进行业务拆分
技术
Web容器用Tomcat,框架主要是Spring MVC,中间服务层是Dubbo,服务注册是用ZooKeeper,核心业务开发方式是Spring和Mybatis等;数据的存储是MySQL,数据的缓存是本地缓存和redis,消息和实时计算是Kafka, Storm,日志以及监控系统则是用典型的ELK和Zabbix。
架构
基础设施是一块,然后中间是服务,上面是日常的应用。
基础设施就包括典型的存储、消息、框架,还有发布、运维、监控等等。
中间就是现在典型的SOA服务,用户的资产、服务、流水、交易等等,所有的服务采用Spring Boot打包部署,主要便于运维上的统一和方便做一些切面层的事情。
最上面是应用,包括社区、记帐、钱管家、理财。
而安全和风控会切入在每一个环节。