首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
bash
lua
golang
filter
java
integer
main
subset
stream
get
function
range
hashset
format
hook
scala
erlang
web3
loops
solr
split
email
timezone
eval
case
runtime
default
version
process
copy
testing
actionscrip
heatmap
c语言
command
char
header
keyword
list
future
hashtable
hash
less
instance
triggers
dll
fetch
input
go
object
spring
cPlusPlus
heap
include
md5
httprequest
substring
const
php8
cookie
timestamp
bitmap
node.js
config
plugins
php5
ascii
emoji
rsa
utf-8
cmd
web
yaml
expression
tags
python3
join
perl
vba
当前位置:
开发笔记
>
编程语言
> 正文
当我们在聊微服务的时候,我们在聊什么?
作者:小青年 | 来源:互联网 | 2023-09-25 09:08
鸡仔说:微服务是什么玩意?到底要不要用微服务,用微服务有哪些好处,错误地使用微
鸡仔说:
微服务是什么玩意?到底要不要用微服务,用微服务有哪些好处,错误地使用微服务会引发哪些问题?且听鸡仔慢慢道来
不知道大家有没有这种困惑,当公司业务持续推进时,之前的项目代码会变得越来越臃肿,尤其是当公司人员流动快,大家都持续在一个项目上贡献代码的时,这种情况尤为明显。刚开始大家可能还蛮有追求,顺着开发规范的流程走,但是项目紧,任务重,就难免会有这样或者那样的疏漏。造成的结果是,哪一天线上出现了 bug,但无法快速定位问题,就算你定位到问题了,也无法快速知道这段代码是谁写的,具体业务逻辑是干什么的,这无异于定时炸弹,应该在项目的早期尽可能避免,中期尽可能排查并清除。
有人可能会提出反驳意见:”如果大家都按照规范走,就不会出现这样的情况“。那鸡仔就在想,国内真的有哪些公司会按照规范的开发流程走嘛?比如鸡仔经历过的公司,几乎没有一家规定需要写测试用例,没有一家会面向接口开发,更别提按照软件开发的设计范式走。都是怎么快怎么来。那针对以上的情况,有没有治理复杂软件项目的可行方案呢?
有的,就是利用分治思想。将大的软件系统,分为不同的微服务模块。大型的软件程序的拆分,至少有以下几点好处:
01
模块化
分别开发
独立出来的服务,能够各自去开发,整体的项目进度各自部分的负责人自己去把控,项目进展会更快,管理起来也更加方便。
降低风险
所有模块的代码都放在一个项目程序中,长远来看,是一件风险极大的事,当其中一个项目出了问题,那整个项目或许就会挂掉,有边界是好事情。
02
灵活性
多语言合作
刚开始我们开发项目的时候,大家可能都是同一种语言,比如用 python 写采集程序,后面发现有时候 python 性能不太好,比如下载器对并发性能要求比较高,想找一个针对高并发友好的语言进行开发,比如 java 或 go去开发。因为微服务各自都是隔离了就非常方便,完全可以做到跨语言开发。
各自部署分别拓展
不同的任务对运行环境的需求是不同的。比如对于采集任务,是网络 IO 密集型任务,我们希望能够有尽可能多的机器运行,对于机器的性能要求不是很高。而对于解析任务,则是 CPU 密集型任务,机器的性能会直接影响解析的效率,因此把拥有更多核的机器分配给解析任务是更好的选择。
03
健壮性
All in one 风险较高
项目运行在单机上,如果该项目在该机器上挂掉,那么用户可能就直接无法使用该程序的任何功能。但如果拆解成微服务多机部署,则可以避免这种问题。比如一个论坛网站,评论微服务功能无法使用,至少不会影响用户正常浏览网站内容。
04
所有权
项目管控方便
如果在一家创业公司,人员流动频繁不可避免,这时候即使你在刚开始有明确的架构和代码规范,但随时时间的推移,任何人都可以修改代码的话,很快你就会发现,代码的结构会变得不可控,无法做到之前设想的样子。而如果是使用微服务,就可以将服务拆分成多个模块,各自去负责各部分的代码,方便评估代码质量,并且如果哪个模块出了问题,就只需找那个模块的负责人,方便问题追溯。
既然微服务这么牛皮,那是不是我们任何一个地方,都要拆分成微服务,尽可能拆的足够小呢?也不尽然,这还要看你公司的实际情况而定,不能为了微服务而微服务。
实际上微服务太小会引发混乱,首先,这实际上违背了模块化的意义。微服务的组织应该和代码中,类、数据和方法的关系类似。微服务中的代码组成在一起应该是提供了一个完整且边界清晰的功能。
另外,如果你整个项目没有规划,先干了再说,任何一个小的功能点都想着先起一个微服务再说,导致的结果是维护和测试的成本急剧飙升。单体服务非常容易测试,但如果一个功能用到了一批微服务,那么想测试该部分是否运行正常,需要将该部分功能依赖的所有微服务全部运行起来才能测试。维护的时候也是同样,多个微服务状态的监控,运行状态监控等等。
既然微服务有这么多好处,但使用不好会引发诸多的问题,有小伙伴一定会和鸡仔有一样的困惑:我们的项目到底要不要使用微服务呢?何时使用微服务呢?鸡仔觉得,
其实在公司项目还不是很复杂的时候,使用单体应用就能很快满足业务需求。这个时候引入微服务,就无形间增加了项目的维护成本,引入微服务只会拖慢程序的进度,根本没必要。但一旦公司业务走
向
正轨,开始步入规模化拓展时,你发现单体程序很难部署,甚至有时候会牵一发动全身。
那么就应该着手引入微服务了。
综上,微服务是开发开发复杂软件系统的有效工具,
从长远意义上来说,微服务适时引入,会极大地提高未来的可拓展性和灵活度,但过早引入微服务会在一定程度上拖慢你的项目进度。
希望对于这篇文章对于不了解微服务和了解了微服务但还在纠结要不要引入的童鞋有所启发。
祝五一快乐!
以上,
如果觉得内容对你有所帮助,还请点个「在看」支持,谢谢各位dai佬!
好看的人都点了在看
数据库
微服务
python
并发
java
go
io
cpu
架构
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
java
基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ...
[详细]
蜡笔小新 2023-12-13 19:32:09
java
Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ...
[详细]
蜡笔小新 2023-12-13 16:18:09
java
每天收获一点点Hadoop概述
一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ...
[详细]
蜡笔小新 2023-12-14 18:58:01
java
Android中高级面试必知必会,积累总结
本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ...
[详细]
蜡笔小新 2023-12-14 14:53:02
process
如何限制php数据库链接数和连接超时时间?
本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ...
[详细]
蜡笔小新 2023-12-14 14:06:10
function
[译]技术公司十年经验的职场生涯回顾
本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ...
[详细]
蜡笔小新 2023-12-14 11:31:05
java
如何通过全新应用内评价获取更多优质用户反馈?
Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ...
[详细]
蜡笔小新 2023-12-13 17:23:03
java
CentOS 7部署KVM虚拟化环境之一架构介绍
本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ...
[详细]
蜡笔小新 2023-12-12 21:38:57
process
【机器学习】生成式对抗网络模型综述
生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ...
[详细]
蜡笔小新 2023-12-14 17:51:18
case
的错误消息:
ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ...
[详细]
蜡笔小新 2023-12-13 20:28:08
java
高校天文共享平台开发过程中的思考与规划
本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ...
[详细]
蜡笔小新 2023-12-13 18:08:58
erlang
Thrift教程初级篇——RPC框架Thrift的安装环境变量配置与第一个实例
本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ...
[详细]
蜡笔小新 2023-12-13 17:36:52
get
计算机存储系统的层次结构及其优势
本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ...
[详细]
蜡笔小新 2023-12-13 17:32:41
get
Web学习历程记录(七)——Tomcat基本概念和配置
本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ...
[详细]
蜡笔小新 2023-12-13 17:08:24
format
解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ...
[详细]
蜡笔小新 2023-12-13 16:31:57
小青年
这个家伙很懒,什么也没留下!
Tags | 热门标签
bash
lua
golang
filter
java
integer
main
subset
stream
get
function
range
hashset
format
hook
scala
erlang
web3
loops
solr
split
email
timezone
eval
case
runtime
default
version
process
copy
RankList | 热门文章
1
flac格式转mp3怎么转?
2
使用dbeaver查mysql的表会导致锁表的问题
3
【WordPress】首页右侧添加广告代码
4
linux mysql tmpdir_谈谈tmpdir与innodb_tmpdir的区别和用处
5
最高境地的Linux桌面
6
使用MIUI远程管理时打开电脑文件出现“ftp无法访问此文件夹,请确保输入的文件名是正确”
7
github: 提高github下载速度
8
怎么看so文件是哪个aar引进来的_手机爱奇艺下载视频存在哪个文件夹
9
vivo手机没有更多无线连接设置吗?
10
thinkphp 6.x查看版本
11
软件测试中的望闻问切法你知道吗?不知道的更得点开,没错,就是点它!
12
如何用思维导图进行会议管理
13
第五章 烟雨蒙蒙
14
简单讲解单片机数据、地址、控制总线结构
15
论文免费查重
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有