使用“微服务+云架构”轻松应对系统扩容!
不知道大家打开本文,有没有留意文章所在的分类节点:云计算。其实我的本意,是要将微服务跟云架构归类在一起。因为他们都有着一个相同的存在目的:方便扩容!
扩容。对于遇到过系统瓶颈,需要扩容的系统,恭喜你,你的系统一定是快速发展,遇到了访问量上升的情况!
【云架构,系统扩容案例】
先说下我个人的经历:我是做GPS防盗器系统的,硬件需要给后台服务器回发数据,所以硬件产品销售的越好,我的系统就需要面对越来越多的压力挑战。感谢经历了这样的一个过程,让我深刻意识到了系统扩容架构设计的巨大价值。我的项目里,经历过这么三个阶段:
第一阶段:单机阶段
单机应用,单进程应用,事实证明只能承载几百设备并发。
通过改造多线程,IOCP设计模型,可以承载20000以上的并发
瓶颈点:难以突破单机应用的并发能力,每次遇到难点都得重构。在我的案例里,就是可以增加到30000负载,增加不到50000万负载!
第二阶段:手动拆分多服务器阶段
手动分布式分离设计,网站,socket接收程序,缓存,数据库,使用自建机房独立运行。事实证明,可以承载几十万设备并发
瓶颈点:自建机房防火墙设备有并发数限制,CISCO ASA 5515防火墙最大允许25万连接。
第三阶段:云架构阶段
云架构设计,通过修改系统,实现自动扩容。这个时候,客户端设备数再多也没事,因为阿里云的SLB之后的ECS服务器数量可以随时添加和减少,目前已经达到了100多万的设备并发连接无压力。
瓶颈点:仅限于我,将来数据库压力还需要进一步优化,但是目前并发设备数上百万毫无压力,不过阿里云的分布式数据库DRDS似乎也能解决我的难点。
【微服务,模块化应用案例】
我的案例下,重点解释了云架构的作用,没有重点介绍微服务的作用。但是实际上,在几次改造过程中,已经使用了一点点微服务的功能:
模块化功能,刚才我的案例都是基于整体系统拆分,实际上还有个优化空间就是改造成微服务。“微服务应用”举例:
登录系统功能:目前同时登陆用户最多也就几百人。登陆功能代码跟着网站整体发布,负载均衡下需要一下子维护起来一下子更新几十台web机器,显然太多余。如果登陆功能这个“微服务”组件单独发布,那么只用2台web机器(“登录功能专用服务器”)专门负载登陆功能戳戳有余。将来这部分系统压力增加,只需要增加一台“登陆服务器”即可。
查询定位功能:每个人的定位页面都在高频率刷新访问,虽然只有几百人登陆,但是造成的访问次数却高达上万次。怎么办?专门拿出十几台web服务器,用于“定位查询服务器”。这样,如果监控到定位功能有问题,只需要从这十几台“定位查询服务器”中排查问题!
结论:微服务的目的在于软件开发层面的功能化拆分。对于使用微服务:小项目用起来费力,大项目用起来省心。
所以导致现在观点多种:
没接触过大项目的人觉得微服务就是个累赘;
接触过大项目的人承认微服务的价值,却不建议小项目使用微服务进行“高射炮打蚊子”
一直做大流量项目的人,提倡使用微服务。
【结论】
微服务的价值:在于将来访问量上升时,精准调控某一个瓶颈点的功能,主要属于开发层面的储备
云架构的价值:在于访问量上升时,直接增加服务器数量扩大系统承载阈值,主要属于运维层面的储备
微服务+云架构:大型系统的重要组合!
原文地址: https://www.opengps.cn/Blog/View.aspx?id=279 文章的更新编辑依此链接为准。欢迎关注源站原创文章!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
使用java9的uuid生成方式,让uuid生成速度提升一个档次
简介 UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。 uuid 常用场景 IOT 设备,设备号; 网站 sessionid,cookie 用户id; 数据库主键id; uuid 生成工具 hutool Java工具包集mica 基于 Spring、 java8 微服务工具集 压测代码 测试基于 JMH,是专门用于代码微基准测试的工具套件,基于方法层面的基准测试,精度可以达到微秒级。 压测代码源码存放于 github,感兴趣的朋友可以:https://github.com/lets-mica/mica-jmh jdk8UUId @Benchmark public String jdk8UUId() { return UUID.randomUUID().toString(); } jdk8ThreadLocalRandomUUId @Benchmark public String jdk8ThreadLocalRandomUUId() { ThreadLocalRandom random = ThreadLocalRandom...
- 下一篇
scrapy相关专题总结
本月的scrapy已经写完,关于scrapy写了常用的中间件、数据管道、以及scrapy的相关源码,但是感觉可写的内容不是很多,要门是使用相关的要么是一些不用关注的源码。 所以写完scrapy之后还写了些一些其他内容,算是在充数吧,同时预下一个专题是python的数据结构和算法,将对九大算法及其常用数据结构分享,同时将算法应用于数据结构上。 本月scrapy专题相关内容: 《Scrapy框架快速创建项目命令、框架的结构》 《scrapy中最为重要的两个对象Request、Response》 《scrapy中数据处理的两个模块:Item Pipeline与Exporter》 《scrapy自带文件下载器,实现多层级目录结构的存储》 《scrapy中间件源码分析及常用中间件大全》 《scrapy框架通用爬虫、深度爬虫、分布式爬虫、分布式深度爬虫,源码
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果