开发者社区> 问答> 正文

高并发,大数据的java系统,采用应用服务器,数据库服务器,分布式,给点意见?

展开
收起
斌斌8223 2016-01-19 13:33:55 6858 0
3 条回答
写回答
取消 提交回答
  • 阿里云全套解决方案
    2019-07-17 18:25:24
    赞同 展开评论 打赏
  • 学习了

    2019-07-17 18:25:24
    赞同 展开评论 打赏
  • 6年企业级开发平台研发经验。全栈研发工程师,为dojo社区贡献dojox.app前端开发框架,参与研发IBM MobileFirst移动开发平台,参与构建12306手机订票移动平台。对跨平台移动应用开发、安全有深入研究,对PaaS和SaaS服务有涉猎。

    高并发,大数据是一个笼统的概念,实际应用场景中药考虑是有多大的并发,读写压力有多大,磁盘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,当主库出现失败时,自动进行主备切换。
    有多个数据库的时候,根据读写频率进行读写分离。
    数据量大的时候,进行分表操作。

    2019-07-17 18:25:24
    赞同 4 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于社区的分布式 风险感知模型 立即下载
如何利用Redisson分布式化传统Web项目 立即下载
FLASH:大规模分布式图计算引擎及应用 立即下载