专栏首页信息化漫谈案例:高并发业务系统上云设计

案例:高并发业务系统上云设计

业务系统上云后,得益于丰富的云产品,让高并发的系统架构成为可以,如支持海量的用户访问、解决跨运营商的互联问题等以前私有云难以解决的问题。我们今天介绍一下简单的高并发系统设计案例。

首先看一下概览图

1、最终用户通过最后一公里上互联网。通过近几年运营商的提速降费,接入网络已成为光纤,速度很快。

2、业务流量通过骨干网进行中间业务交换。不同运营商之间的带宽拥塞、时延大的问题近几年来随着省内带宽互联已有一定解决,但如果业务跨域运营商,体验仍不如服务器、用户在同一张网好。该问题可以通过BGP多线进行解决。

3、第一公里是业务架构师设计的重点。接下来重点讲。

常用的高可用业务系统架构设计

1、CDN解决地域远、带宽突发的问题。首先采购CDN服务,四川的电信用户访问北京联通的源站点,通过CDN后,直接访问四川电信侧的CDN近端服务器。各位有兴趣会看到大型网站中,图片都放到了CDN中,表现形式是图片的地址是http://image.**.com,这样便于静态资源的加速。

2、反向代理服务器放在本地,避免对后端服务器的压力。Nginx服务器可以实现本地静态资源的存储。用户访问过来后,如果Nginx有用户需要的静态资源,直接返回,不再向内传递业务流量。

3、负载均衡实现多台web服务器的业务均衡。根据不同的用户ip来源、web服务器的真实压力,将请问分发到不同的web服务器中。弹性伸缩服务能根据web服务器的cpu、内存、带宽等平均值、最大值灵活增加、减少web服务器。

4、web服务器的本地缓存再次减少后端负荷的压力。web服务器可以实现本地静态资源的存储。用户访问过来后,如果web有用户需要的静态资源,直接返回,不再向内传递业务流量。

5、分布式缓存降低对数据库的压力。平常我们访问用户的数据,如积分都需要查询、并修改真实数据库的记录,造成压力。例如在11.11期间,我们将秒杀数据缓存到redis内存分布式数据库中,减少对Mysql数据库的压力;或者是更常用的网页间的session数据,判断用户是否登录成功,不用再到mysql数据库中查询。并不是所有数据都要放到redis中,而是将访问频率高、对数据更新频率不高的数据。

6、数据库读写分离。利用云上的数据库读写分离特性,将写数据库引流至主数据库,而将大量的读数据库的请求引流至从数据库中。当然读写分离一般通过数据库中间件来完成,如Mysql Proxy。

读写分离会带来新的问题,主从库的数据存在短时的数据不一致。因此要求数据库的中间件有cache,知道将正在修改的数据读请求应指向主数据。

7、分布式的文件服务器。对于图像、视频等大存储量的数据,一般会放到NAS、OSS等分布式文件系统中,便于横向扩展。

8、消息队列服务器将同步方式转异步方式处理。如果业务量突然暴涨十倍,难以支撑,我们可以增加一个消息队列服务器,将减库存等数据先缓存下来慢慢排队处理。大家都有在12306订过火车票,当你支付成功后,仍有提示订票失败的情况,12306将给你退费,这实际已经是一个应用场景。12306只同步扣了您的费用,但库存数据通过消息队列服务器进行异步处理。

本文分享自微信公众号 - 信息化漫谈(informationwalk)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 马蜂窝消息总线——面向业务的消息服务设计

    蜂窝消息总线于 2017 年 11 月份上线,截至目前,已经被电商、酒店、大交通、社区等多个技术团队投入到生产环境的使用中。

    Spark学习技巧
  • 实战 Spring Cloud 微服务架构下的“秒杀”(含代码)

    来源:github.com/coderliguoqing/distributed-seckill/

    用户1516716
  • 浅析Kafka实时数据处理系统

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    week
  • 你应该知道的RocketMQ

    在很久之前写过一篇Kafka相关的文章,你需要知道的Kafka,那个时候在业务上更多的是使用的是Kafka,而现在换了公司之后,更多的使用的是Rocketmq,...

    用户5397975
  • 【RT-Thread笔记】内核基础

    最近在工作中有用到多任务系统,趁热进行学习一下。这里我选择国产实时操作系统RT-Thread进行学习,因为现在很火呀。之前已经有简单地过了一遍RT-Thread...

    正念君
  • 深入理解RocketMq普通消息和顺序消息使用,原理,优化

    最近一直再做一些系统上的压测,并对一些问题做了优化,从这些里面收获了一些很多好的优化经验,后续的文章都会以这方面为主。

    用户5397975
  • 注意Spring事务这一点,避免出现大事务

    本篇文章主要分享压测的(高并发)时候发现的一些问题。之前的两篇文章已经讲述了在高并发的情况下,消息队列和数据库连接池的一些总结和优化,有兴趣的可以在我的公众号中...

    用户5397975
  • 消息队列面试都怎么问?

    作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚(请允许我使用一下夸张的修辞手法)。

    黄泽杰
  • 微服务架构-利用事件驱动实现最终一致性

    在单体应用中,我们可以利用关系型数据库的特性去完成事务一致性,但是一旦应用往微服务发展,根据业务拆分成不用的模块,而且每个模块的数据库已经分离开了,这时候,我们...

    Java_老男孩
  • 消费端如何保证消息队列MQ的有序消费

    消息队列,既然是队列就能保证消息在进入队列,以及出队列的时候保证消息的有序性,显然这是在消息的生产端(Producer),但是往往在生产环境中有多个消息的消费端...

    Java_老男孩

扫码关注云+社区

领取腾讯云代金券