Java高可用集群架构与微服务架构简单分析
序
可能大部分读者都在想,为什么在这以 dubbo、spring cloud 为代表的微服务时代,我要还要整理这种已经“过时”高可用集群架构?
本人工作上大部分团队都是7-15人编制的开发团队,对应的公司项目也大都是中小型项目,最大的项目 PV/UV 也就只有 10w/2w 。在这样的场景下,中小型公司一般都是创业起步没多久,大部分都需要本着“开源节流”、“以最小的成本把产出最大化”。微服务架构相比于高可用集群架构,个人理解,对于技术团队的成员编制相对要多一点,服务器部署成本相对也要高一点。
作为技术团队负责人,肯定要为企业整体成本考虑,否则要不了多久,便是讨薪大军的一员了吧。。。
一、如何选择
1、高可用集群
适用于中小型创业公司项目架构,小型技术团队快速迭代版本发布部署需求,前期低成本运行,爆发时可通过投入适量成本横向扩容服务器抗压。
特点:
- 前期技术开发成本低
- 一定的服务器扩容成本
- 核心团队编制及技能要求较少
- 项目发布部署基本无依赖,时间成本低
- 服务器运维成本一般
- 大而全的项目模块分离设计
- 更省更稳的技术架构选择
- 微服务架构强迫症不适用
2、微服务架构
适用于业务架构较大的中大型科技公司项目架构,系统可拆分多个项目单独运营,大型技术团队、平台产品规范化管理,前期投入一定的成本,可以低成本扩容指定服务的服务器抗压。
- 前期一定的技术开发成本
- 较低的服务器扩容成本
- 核心团队编制及技能要求较高
- 项目发布部署存在依赖,逐个部署,时间成本较高
- 服务器运维成本一般或较高
- 较清晰的项目模块分离设计
- 更潮更时尚的技术架构选择
二、高可用集群架构
1、必备服务器清单
- 负载均衡服务器
- web项目服务器
- 缓存服务器
- 数据库服务器(主备)
注意:可能有人会问,若是小型项目单机服务,负载均衡是否就不需要?负载均衡主要工作是分发请求到源服务器,另一个作用也是为了保护源服务器,不暴露服务器真实IP,大幅度降低服务器被DDoS攻击的风险,可参考《被人DDoS攻击了,分析一下原理和防护》 一文。
2、扩展服务器清单
- 更多web项目服务器(集群负载)
- 异步服务服务器(配置中心、消息队列、job任务等)
- 数据库服务器(读写分离、主从复制)
- 文件服务器
2、架构图
三、微服务架构
1、服务器清单
- dubbo / spring cloud 全家桶组件服务器
- 负载均衡服务器
- A模块 web项目服务器
- B模块 web项目服务器
- C模块 web项目服务器
- XXX模块 web项目服务器
- 缓存服务器
- 数据库服务器
- 文件服务器
- 异步服务服务器(配置中心、消息队列、job任务等)
2、架构图
注:图片来源 http://yun.itheima.com/open/217.html
四、总结
综上,我们对于高可用集群和微服务架构做了简单的场景和架构图分析,并不是说什么场景下一定要用什么架构,也不是说什么最潮流就用什么架构,而是根据实际成本和产出作为出发点做选择。
创业公司刚起步,资金可能也就百来万,搞微服务架构,光技术团队和服务器一个月的成本就占了公司一大头,产品还没上线,公司就已经倒闭了;
有资源的公司,动不动就能获得千万级甚至更高级别的融资,业务方向众多,若还只是用高可用架构,所有的业务模块都臃肿在一个项目里,不论是代码管理还是人员管理上,都是巨大的资源消耗。
My Blog
技术交流
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
QQ for Linux 复活,微信 for Linux 还会远吗?
10 月 24 日晚间,腾讯突然发布了沉寂多年的 QQ for Linux 新版本,引起了一阵欢呼。有网友分析腾讯赶在 1024 这个程序员的节日里重新发版,单纯是娱乐性质,凑凑节日热闹,并且新版本做得也确实不怎么样,对于它后续的跟进研发不必抱有太大希望。 而另一部分网友的观点则比较脑洞大开,他们认为腾讯 QQ 这个动作背后的原因可以联系到美国对华为的技术封锁战。 很简单,美国从针对华为入手,开始对中国封锁一些基础技术,比如芯片与操作系统。之所以提芯片与操作系统,是因为目前 ARM 与 Android 都已经明确不给华为用了,而实际上这背后会牵动整个“软件生态链”,也就是包括数据库、编译器、编程语言与应用软件等,另一方面还映射到整个开源生态。 这种情况下国内在芯片、操作系统、数据库、编译器与相关的应用等方面都在加紧发力,所以近期可以看到在这些领域各种自主研发技术突破(或者跟进)的新闻,比如: 鸿蒙操作系统的公开。 方舟编译器的开源。 OceanBase 在“数据库领域世界杯”的 TPC-C 基准测试中,打破美国保持了 9 年的世界纪录,让国产数据库首次跃居榜首。(先不管业内对于这背后实...
- 下一篇
由浅入深:Python 中如何实现自动导入缺失的库?
在写 Python 项目的时候,我们可能经常会遇到导入模块失败的错误:ImportError: No module named 'xxx' 或者 ModuleNotFoundError: No module named 'xxx' 。 导入失败问题,通常分为两种:一种是导入自己写的模块(即以 .py 为后缀的文件),另一种是导入三方库。本文主要讨论第二种情况,今后有机会,我们再详细讨论其它的相关话题。 解决导入 Python 库失败的问题,其实关键是在运行环境中装上缺失的库(注意是否是虚拟环境),或者使用恰当的替代方案。这个问题又分为三种情况: 一、单个模块中缺失的库 在编写代码的时候,如果我们需要使用某个三方库(如 requests),但不确定实际运行的环境是否装了它,那么可以这样写: try: import requests except ImportError: import os os.system('pip install requests') import requests 这样写的效果是,如果找不到 requests 库,就先安装,再导入。 在某些开源项目中,我们可能还会...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 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的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果