微服务畅想录

关于微服务的文章,网络上很多,也比较专业。下面,我尝试着用简单的话写点自己对微服务的理解,非常接地气,但只是一家之言,大家还是带着辩证的眼光来读。

1、微服务的本质是什么?

微服务的本质是:分而治之。其实这四个字可能用在很多地方,比如模块的划分、类的划分、方法的划分。在微服务这边就是进程的划分,即将不同的业务拆成独立的进程。

2、微服务会降低项目的复杂度?

会。我所说的”会“是指会降低业务上的复杂度,而不会降低技术上的复杂度,其实,技术上的复杂度会大大增加。原来我们所有的业务都放在一个项目,即一个进程中,业务纵横交错,人员变更快,会很快让一个项目的代码变得难以维护,比如冗长的类和方法、随便放的文件夹等等,想想你有多少次想重构代码的冲动就知道了。业务上如果拆成独立的服务后,业务关联少,代码就会简单很多,一个服务只处理自己或与之关联很低的业务。

3、微服务怎么进行业务拆分?

想要拆分好微服务,首先得对自己所在的项目业务有充分的理解。我们做技术的,非常喜欢追求高大上的技术,而瞧不上公司的增删改查,觉得写curd,显得自己很low。其实,我们可以想一想,你匆匆忙忙写完curd后,然后去看高大上的技术文章,自己是真提高了还是只是幻觉?你看的那些,你能落地到你的项目中,帮公司解决实际的业务问题么?有时候,我们是搞反了。

4、微服务的涉及到的技术栈有哪些?

太多了。以前我们单体应用,建立个三层就可以了,比如一个BS项目,.net使用AspNetMvc即可,java使用ssm或springboot就行。把业务拆成独立服务后,涉及的技术栈就太多了,比如通信相关的thirft、grpc、http,服务治理相关的consul、eureka等。这些就不一一列举了,网上文章太多了,这些没有好的建议,都是和工具相关的,总之多实践就行,而不是看文章。

5、微服务怎么部署?

单体服务的时候我们可以使用IIS或tomcat部署,现在拆成多个服务后,比如订单服务、商品服务、短信服务等,有的服务需要集群,而有的服务只要单个,需要用到服务注册发现,本质上其实就要能得到服务的IP和端口就行。微服务后,大家应该都知道的,单机使用docker、docker-compose,集群使用k8s。

6、微服务通信使用http还是grpc?

建议公网使用http,内网使用grpc。

7、微服务是否需要网关?

需要。业务拆成多个微服务后,比如多个http服务,我们不能将服务直接对外暴露给客户端,需要添加一个网关层,做数据的聚合,比如订单列表接口,需要调用订单服务和商品服务,才能组装成客户端需要的数据。网关其实就是webapi,不同的业务有不同的webapi,比如管理后台调用管理后台的webapi,移动端调用移动端的webapi。但一些公共的操作,比如登录、认证、限流等功能,需要每个webapi都要实现一套,为了将这些操作统一,可以在这些webapi上加一层公共的网关,由网关统一实现上面列举的功能,并根据规则将客户端请求路由到对应的webapi,比较出名的有ocelot。

8、老项目需要重构成微服务么?

不推荐。老项目通常比较稳定,当然,代码也比较混乱,重构的风险太大。新项目在充分调研后,可以使用微服务。不过提醒一下,微服务涉及的知识非常多,使用需谨慎。

9、总结

微服务最重要的理念就是将复杂庞大的业务拆成一个个简单清爽的独立服务,所以一定要先理解自己公司的业务,不能照猫画虎,记住四个字:分而治之。微服务涉及到的框架工具,建议少看文章,动手操作一遍,也是四个字:知行合一。

如果本文对你有所帮助,就给个“赞”吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql sql 检测磁盘_MySQL 数据库磁盘占用情况查询

查询所有数据库占用磁盘空间大小的SQL语句:select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2), MB) as data_size,concat(truncate(sum(index_length)/1024/1024,2),MB) as index_sizefrom information_schema.tablesgroup by TABLE_SCHEMAorder…

anjularjs ajax 调用,AngularJS AJAX调用的服务(AngularJS Ajax Call in Service

我想我的应用程序,使AJAX调用一个RESTful Web服务。 在我的html文件是连接到一个范围对象两个文本框。 这两个领域都连接到通过NG-变“后”功能。 post方法发送“形式”变量从范围的API和web服务增加了两个数字,并用JSON文件,该文件现在包含的…

如何在 ASP.NET Core 中 使用 功能开关

.NET Core 中的 功能管理 (Feature Management) 包可用于实现 功能开关,什么意思呢?就是可以通过 功能开关 特性动态的改变应用程序的行为而不需要改变任何的业务逻辑代码,听起来是不是挺有意思,本篇我们就来讨论如何使用这个包。…

存储mysql数据存在特殊字符时处理_SQL数据库对于保存特殊字符的解决办法

数据库的Char、Vachar类型可以兼容汉字,但特殊字符不行,在保存包含有特殊字符的字符串、正文时,会将特殊符号替换成一个”?”号。例如: “基础教育课程手机报•特刊” 》 “基础教育课程手机报?特刊”解决办法是将字段改成NCha…

接口 Swagger 部分Web API的隐藏

背景Swagger是目前最受欢迎的REST APIs文档生成工具,同时也是API的在线测试工具。功能强大谁用谁知道。我就不用在这里推广它了。今天要解决的问题是:如果让一些特定的API接口在Swagger中不显示,即从Swagger中过滤掉一些不想展示的接口&#…

mysql流程控制_Mysql之流程控制结构

顺序结构:程序从上往下依次执行分支结构:程序从两条或多条路径中选择一条去执行循环结构:程序在满足一定条件的基础上,重复执行一段代码一、分支结构1、if函数功能:实现简单的双分支语法:if(表达式1, 表达式…

文件共享服务器第二部,第二章-构建Samba文件共享服务器.docx

洛阳鸿卓国际IT洛阳鸿卓国际IT教育培训中心姓名: 梁冬辉时间:2012章实验报告所在班级: T1181月16实 验 任 务日Linux服务器版系统的地址为Win dows系统的地址为网络拓扑检查smb服务消息是否安装[rootocaThOSt /]# cd /unt/Asianux/RPMS/i roo…

「译」 .NET 5 新增的Http, Sockets, DNS 和 TLS 遥测

.NET 一直在稳定的增加和改善对应用程序进行跨平台的诊断分析,在.NET Core 3.0, 我们看到了 EventCounters[1] 的介绍,用于观察和分析指标测量。我最近在几个 .NET Core 的应用程序中使用 counters,来跟踪服务一段时间内 http 的请…

服务器磁盘系统,服务器磁盘阵列与操作系统

服务器磁盘阵列与操作系统 内容精选换一换硬件要求如表1所示。操作系统要求如表2所示。上表中所需Ubuntu下载地址:服务器1:Ubuntu 18.04.1镜像包、Ubuntu 16.04.4 镜像包。服务器2:Ubuntu 16.04.3 镜像包。在安装操作系统过程中“选择软件列表…

Prism for WPF 搭建一个简单的模块化开发框架

站长今天发现一个好项目,看原文贴图挺不错的,好项目应该让更多人知道,特别是该项目使得Prism搭建,网上使用prism做的开源成熟项目不多,这个值得大家研究。看项目gitee仓库截图,项目不错,star太少…

mysql怎么访问用户B_MySQL访问控制和用户管理

访问控制你需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。这就是所谓的访问控制,管理访问控制需要创建和管理用户账号。多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表;某些用户需要读表&#xff0…

探索 .Net Core 的 SourceLink

介绍Source Link是一组软件包和一个规范, 它将一些元数据添加到PDB文件,以将本地文件重新映射到GitHub上的文件,因此Visual Studio可以在这需要时下载文件, 该项目的目的是可以为使用Nuget安装软件的用户提供源代码调试, Microsoft库&#xf…

mysql group by 范围_MySQL 按照范围/等级 进行Group By

我们要做一张报表表格,从mysql里取出数据,然后按等级分组,如何实现呢?MySQL 示例 SQL:SELECTftime,sum(cost) as cost,count(advertiser_id) as aduser_num,sum(pv) as pv,sum(vc) as vc,CASEWHEN cost>100000 THEN ‘1’WHEN …

「译」 用 Blazor WebAssembly 实现微前端

原文作者: Wael Kdouh原文链接:https://medium.com/waelkdouh/microfrontends-with-blazor-webassembly-b25e4ba3f325我聊下最近我在做的事情,然后分享下在Blazor WebAssembly 微前端的实现细节,这篇文章是我的一些心得,以及一个示…

ubuntu mysql集群搭建_ubuntu server部署mysql集群

简介[说明本次部署的内容,目的等等]本部署文档的目的是如何在ubuntu server上进行mysql的群集部署。前期准备在进行本文档操作前,需要完成如下前期步骤:1.安装3台ubuntu server服务器;Server1: ndbd 192.168.68.5Server2: ndbd 19…

使用 dotnet-monitor 分析.NET 应用程序

dotnet-monitor 是 .NET Core 命令行接口 (CLI) 工具, 可以很方便的在dotnet环境中分析我们的应用程序,需要注意的是,目前它还只是一个实验性的工具在这之前,我们使用的有 dotnet-counters,dotnet-dump 和 dotnet-trace&#xff0…

mysql数据库查看用户名_mysql怎么查看用户名?

我们在使用mysql的时候,有时候需要来查看当前用户。本篇文章将和大家讲述mysql怎么查看用户名,感兴趣的朋友可以了解一下。启动数据库:[rootserver ~]# mysqld_safe &[1] 3289[rootserver ~]# 130913 08:19:58 mysqld_safe Logging to /u…

如何实现 ASP.NET Core WebApi 的版本化

Web API 的版本化可以尽量保证在相同url情况下保留一个 api 的多个版本,通常一个 webapi 会有多个client,这些client包括:app,web,html5,crawl 等等同构或者异构的平台,当 api 升级之后&#xf…

mysql查询重复的名字_Mysql中like用法:查询名字中含有风字的学生信息

一、表名和字段–1. 学生表 student (s_id,s_name,s_birth,s_sex) –学生编号,学生姓名,出生年月,学生性别–2. 课程表 course (c_id,c_name,t_id) –课程编号,课程名称,教师编号–3. 教师表 teacher (t_id,t_name) –…

mysql单行数据64k_字段数据大于64K的解决方案 | 学步园

方法一:在SQL Server Management Studio配置 max text repl size 选项:1、在对象资源管理器中,右键单击服务器并选择“属性”。2、单击“高级”节点。3、在“杂项”下,将“最大文本复制大小”选项更改为所需的值。方法二&#xff…