热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

当我们在聊微服务的时候,我们在聊什么?

鸡仔说:微服务是什么玩意?到底要不要用微服务,用微服务有哪些好处,错误地使用微

鸡仔说:微服务是什么玩意?到底要不要用微服务,用微服务有哪些好处,错误地使用微服务会引发哪些问题?且听鸡仔慢慢道来

不知道大家有没有这种困惑,当公司业务持续推进时,之前的项目代码会变得越来越臃肿,尤其是当公司人员流动快,大家都持续在一个项目上贡献代码的时,这种情况尤为明显。刚开始大家可能还蛮有追求,顺着开发规范的流程走,但是项目紧,任务重,就难免会有这样或者那样的疏漏。造成的结果是,哪一天线上出现了 bug,但无法快速定位问题,就算你定位到问题了,也无法快速知道这段代码是谁写的,具体业务逻辑是干什么的,这无异于定时炸弹,应该在项目的早期尽可能避免,中期尽可能排查并清除。
有人可能会提出反驳意见:”如果大家都按照规范走,就不会出现这样的情况“。那鸡仔就在想,国内真的有哪些公司会按照规范的开发流程走嘛?比如鸡仔经历过的公司,几乎没有一家规定需要写测试用例,没有一家会面向接口开发,更别提按照软件开发的设计范式走。都是怎么快怎么来。那针对以上的情况,有没有治理复杂软件项目的可行方案呢?
有的,就是利用分治思想。将大的软件系统,分为不同的微服务模块。大型的软件程序的拆分,至少有以下几点好处:

01模块化

分别开发
独立出来的服务,能够各自去开发,整体的项目进度各自部分的负责人自己去把控,项目进展会更快,管理起来也更加方便。
降低风险
所有模块的代码都放在一个项目程序中,长远来看,是一件风险极大的事,当其中一个项目出了问题,那整个项目或许就会挂掉,有边界是好事情。

02灵活性

多语言合作
刚开始我们开发项目的时候,大家可能都是同一种语言,比如用 python 写采集程序,后面发现有时候 python 性能不太好,比如下载器对并发性能要求比较高,想找一个针对高并发友好的语言进行开发,比如 java 或 go去开发。因为微服务各自都是隔离了就非常方便,完全可以做到跨语言开发。
各自部署分别拓展
不同的任务对运行环境的需求是不同的。比如对于采集任务,是网络 IO 密集型任务,我们希望能够有尽可能多的机器运行,对于机器的性能要求不是很高。而对于解析任务,则是 CPU 密集型任务,机器的性能会直接影响解析的效率,因此把拥有更多核的机器分配给解析任务是更好的选择。

03健壮性

All in one 风险较高
项目运行在单机上,如果该项目在该机器上挂掉,那么用户可能就直接无法使用该程序的任何功能。但如果拆解成微服务多机部署,则可以避免这种问题。比如一个论坛网站,评论微服务功能无法使用,至少不会影响用户正常浏览网站内容。

04所有权

项目管控方便
如果在一家创业公司,人员流动频繁不可避免,这时候即使你在刚开始有明确的架构和代码规范,但随时时间的推移,任何人都可以修改代码的话,很快你就会发现,代码的结构会变得不可控,无法做到之前设想的样子。而如果是使用微服务,就可以将服务拆分成多个模块,各自去负责各部分的代码,方便评估代码质量,并且如果哪个模块出了问题,就只需找那个模块的负责人,方便问题追溯。
既然微服务这么牛皮,那是不是我们任何一个地方,都要拆分成微服务,尽可能拆的足够小呢?也不尽然,这还要看你公司的实际情况而定,不能为了微服务而微服务。
实际上微服务太小会引发混乱,首先,这实际上违背了模块化的意义。微服务的组织应该和代码中,类、数据和方法的关系类似。微服务中的代码组成在一起应该是提供了一个完整且边界清晰的功能。
另外,如果你整个项目没有规划,先干了再说,任何一个小的功能点都想着先起一个微服务再说,导致的结果是维护和测试的成本急剧飙升。单体服务非常容易测试,但如果一个功能用到了一批微服务,那么想测试该部分是否运行正常,需要将该部分功能依赖的所有微服务全部运行起来才能测试。维护的时候也是同样,多个微服务状态的监控,运行状态监控等等。
既然微服务有这么多好处,但使用不好会引发诸多的问题,有小伙伴一定会和鸡仔有一样的困惑:我们的项目到底要不要使用微服务呢?何时使用微服务呢?鸡仔觉得,其实在公司项目还不是很复杂的时候,使用单体应用就能很快满足业务需求。这个时候引入微服务,就无形间增加了项目的维护成本,引入微服务只会拖慢程序的进度,根本没必要。但一旦公司业务走正轨,开始步入规模化拓展时,你发现单体程序很难部署,甚至有时候会牵一发动全身。那么就应该着手引入微服务了。
综上,微服务是开发开发复杂软件系统的有效工具,从长远意义上来说,微服务适时引入,会极大地提高未来的可拓展性和灵活度,但过早引入微服务会在一定程度上拖慢你的项目进度。希望对于这篇文章对于不了解微服务和了解了微服务但还在纠结要不要引入的童鞋有所启发。
祝五一快乐!

以上,如果觉得内容对你有所帮助,还请点个「在看」支持,谢谢各位dai佬!

好看的人都点了在看



推荐阅读
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
author-avatar
小青年
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有