在软件开发领域不存在银弹,当用一项新的技术或新的架构时一定要明白其背后的原理,确保把合适的技术应用在合适的项目上,而不是盲目跟风。

单体应用伸缩性差,而且随着应用规模的扩大,业务逻辑和开发部署过程都变得极其复杂。牵一发而动全身,任何一个微小的改动都有可能影响整个应用,新技术的更新换代对于单体应用来说几乎是个不可能的任务。

相比单体应用,微服务灵活自由,伸缩性强,近年来深受软件开发者的热捧。不过,微服务虽然没有了单体应用的某些局限,但却对开发运维和整个组织提出了更高的要求。在采用微服务架构之前开发者要先想清楚自己的项目是否适合采用微服务架构,以及是否有足够的能力运维一个微服务生态系统。

微服务概念的提出者Martin Fowler其实在很早之前就说明了使用微服务需要具备的三个核心能力,分别是服务器的快速扩容、监控和应用的快速部署。下面是具体介绍。

硬件资源是否能够快速到位

为了避免资源竞争和服务间的相互影响,微服务一般是部署在单独的硬件资源上。当有新的微服务加入系统,或者需要对微服务进行伸缩时,必需能足够快地为其准备相应的硬件资源。如果使用了云服务,在获取新资源时会相对容易一些。但在没有云服务的情况下,那么至少需要有一个自动化或者半自动化的系统能够满足快速分配资源的需求。

是否具备了微服务监控能力

微服务生态系统可能会很庞大,服务间相互依赖,个体微服务的可用性会影响整个系统的可用性。对微服务进行监控可以及时地发现微服务的运行状况,如果有些服务出现故障(可能有些在测试阶段没有被测出来的缺陷进入了生产环境),需要及时回滚到之前的稳定版本,避免对系统的整体可用性造成影响。

是否具有快速的开发部署流程

微服务变化很快,一个微服务在一天之内可能需要部署多次,因此需要一个快速的开发、部署以及测试流程。可以在整个流程中引入部署管道,部署管道规定了一系列严格的自动化部署过程,可以加快部署的速度。

微服务系统通常涉及多个团队之间的合作,除了开发团队之间的合作之外,还有开发团队和运维团队之间的合作。运维团队需要保证开发团队能够活得足够的资源,当发生问题时,运维团队能够快速向开发团队暴露问题,开发团队能够及时地解决问题。DevOps是开发和运维之间的粘合剂,可以促进团队之间的合作。

微服务系统比我们想象的要复杂得多。微服务给我们带来了诸多好处,同时也对我们提出了更高的要求。必要的时候,我们需要通过调整组织结构来更好地支持微服务系统的发展。所以在转向微服务架构时,需要先考虑好这些问题,并想清楚微服务是否真的适合自己。

最新文章

  1. [C#] async 的三大返回类型
  2. Android 开发 res里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
  3. 最好最实用的PHP二次开发教程
  4. Eclipse 打开js文件时出现 Could not open the editor...
  5. OI大佬博客集
  6. 转-CSS padding margin border属性详解
  7. Docker 小记 — Compose & Swarm
  8. 设置Nginx+php-fpm显示错误信息
  9. Cow Exhibition [POJ2184] [DP] [背包的负数处理]
  10. vue 周期函数
  11. GC-ALLOC 的另一个重要作用,查内存泄漏
  12. 详解 Tomcat 的连接数与线程池
  13. [转]DevOps实战:百度持续交付体系与最佳实践大解密!
  14. 关于cocos2dx 关键字的问题
  15. Redis 学习之路 (009) - Redis-cli命令最新总结
  16. 微信小程序启动过程分析
  17. 使用electron开发一个h5的客户端应用创建http服务模拟后台接口mock
  18. .Net高级技术——结构体
  19. centos禁止 You have new mail in /var/spool/mail/root提示
  20. Makefile-命令前的@和-符号

热门文章

  1. Easyui 基于kindeditor的扩展
  2. python XML基础
  3. python django -6 常用的第三方包或工具
  4. ios -逆向-代码混淆
  5. 多线程编程中的join函数
  6. charles_https_通过模拟器安装APP然后抓包
  7. Android无线测试之—UiAutomator UiObject API介绍三
  8. Android无线测试之—UiAutomator编译与运行测试代码
  9. vfptr(1)
  10. codevs1044 拦截导弹==洛谷 P1020 导弹拦截