高并发,大数据是一个笼统的概念,实际应用场景中药考虑是有多大的并发,读写压力有多大,磁盘IO有多大,根据具体的情况在系统架构上会有很多的不同。通用架构分层做法如下:
Requests --> load balancer --> Web Server Cluster --> Middlerware --> DB Cluster
根据具体的并发压力,需要有针对性的进行系统扩展。
load balancer层:
load balancer进行请求转发,根据具体的请求数量,需要考虑使用硬件或软件。通常情况下硬件load balancer性能远高于软件load balancer,软件实现中ngnix性能远高于Apache。当然硬件load balancer价格也会非常昂贵,需要专业维护。如F5, Redware.
考虑到页面数据是否可以缓存,需要增加CDN.如淘宝前端页面会直接从CDN读取,12306 80%的访问请求由CDN处理。
根据CDN的策略,带宽大小,并发量大小及业务重要程度,需要考虑多机房部署,减轻带宽和load balancer压力。
Web Server cluster
Web server可以使用开源的Tomcat, jBoss等,也可以使用商业的WebSphere, WebLogic。区别是开源需要自己创建、维护cluster状态,商业软件会极大的简化cluster创建和维护。
稳定,易于维护的Web Server应用服务器是基础,性能则有应用实现决定。
应用需要考虑的是线程并发,查询优化,缓存使用,通信代价。
应用完成后根据单台应用服务器的实际处理能力,横向和纵向扩展Web Server cluster.
横向扩展:增加Web Server数量(提升能力理论上无上限)
纵向扩展:增加硬件机器性能,优化应用性能,提升单台Server性能(提升能力有限,受限于硬件资源)
Middlerware
当涉及到分布式环境,需要使用中间件来保证集群一致性。
Session中间件 :如果业务是无状态,可以直接在load balancer按照轮询或权重策略转发。无需session处理,性能会高很多。
如果业务有状态:1)load balancer使用sticky session策略,由同一台server进行后续有状态服务,session无需处理。但如果server失败,转由其他server服务时,需要重新登录。测试需要client有重新登录机制,否则用户体验不好。2)session复制。session复制需要由session中间件进行处理,保证整个集群共享session,会带来额外性能损耗。
消息中间件 :分布式系统之间进行数据同步和唤醒,多个业务系统同步,需要使用消息中间件进行时效性保证。
远程调用中间件: 远程调用保证分布式系统中高效的数据交换。
数据库中间件: 访问数据库层,如果数据库进行了分库分表操作,需要再数据库中间件中进行操作封装。
缓存中间件: 缓存数据库数据和业务计算数据。
DB Cluster
关系数据库
为保证数据库稳定性,会考虑创建主备数据库,多个主备数据构成数据库cluster,当主库出现失败时,自动进行主备切换。
有多个数据库的时候,根据读写频率进行读写分离。
数据量大的时候,进行分表操作。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。