想使用微服务框架来构建项目,如何操作呢?

2018-03-22 00:28:07 +08:00
 MrMike

最近在考虑将项目拆分成一个个小模块,运行在 docker 里面,每个模块之间用 restful 的方式来通信,所以在考虑使用微服务的框架。

目前的项目主要用 php 开发的,前两天了解了下 sprin cloud,看到一篇文章说是只能运行 java 的项目,所以就没继续了。

对微服务了解不深,所以请问下有这方面经验的朋友,该如何选择呢?

6892 次点击
所在节点    PHP
66 条回复
p2pCoder
2018-03-22 11:00:37 +08:00
@MrMike 首先了解服务注册发现与健康检测,这个和语言没有关系,zk eureka consul 都可以,eureka consul 都是 http restapi 接口完成相应功能的,和语言无关
hlwjia
2018-03-22 11:07:15 +08:00
微服务做起来比说起来难多了,实际操作起来绝对比 monolithic 难多了,我说的还不是技术方面的难

而且大多数公司的业务都用不着微服务,用了反而麻烦;对每个工程师要求也更高,要不是技术牛逼的团队,只会越搞越糟

不如 现在的流程里加强 code review 什么的
MrMike
2018-03-22 11:10:02 +08:00
@WinterWu
@yuhuan66666
@nullen
@lauix
@feiyu1993
@p2pCoder

感谢各位朋友的推荐。看到大家说了这么多,我都有点迷茫,是否真的需要使用微服务了,或许是我的帖子内容没说清楚。

我的初衷其实很简单,就想把现在单一的应用里面很多模块拆分出来,形成一个独立的模块应用,然后模块之间采用一种合适的通信方式进行数据的交互,模块我是打算用 docker 来封装,每一个模块应该都有独立的数据库,这样的话,就算单独运行某一个模块,也都可以使用的。

另外还有两个原因就是:

1,团队的技术水平不一样,但是项目进度又摆在那里,有时间上的要求,不想一个新的开发人员为了开发一个小功能,去花时间学习新的框架,如果能用他们熟悉的框架或方式来实现,这样可以节省时间,然后再逐渐完善。
2,现在的单一系统,修改一个问题,可能会涉及到很多模块的应用,数据库之间的关联性又特别强,有时候修改完后,测试员不够的情况下,没检查仔细,部署上去,就出问题了。
abcbuzhiming
2018-03-22 11:10:49 +08:00
微服务不是银弹,微服务的本质是业务拆分和接口治理,特别是业务拆分,拆不好就完蛋,对于中小型项目,微服务其实付出了额外的代价
abcbuzhiming
2018-03-22 11:14:30 +08:00
@MrMike 之前有篇文章说过一句话:微服务首先是组织架构,然后才是技术架构,它不是“团队技术不行时的选择”,它对整个团队的水平要求其实是提高了而不是降低了。
单一应用的规模如果不够大的话用微服务其实没有优势
微服务对测试和部署的要求其实更高
micean
2018-03-22 11:28:20 +08:00
@MrMike
1 如果开发时用五花八门的框架,以后人员离职维护工作怎么办?
2 不如做好单元测试
nullen
2018-03-22 11:30:56 +08:00
@abcbuzhiming 赞同。
WinMain
2018-03-22 11:32:06 +08:00
@MrMike 不知道有没有公司自己改的,也不太清楚官方有没有提供这种小办法供其他语言。暂时都是用 spring boot。
wqqdhero
2018-03-22 11:32:30 +08:00
建议用 RPC 通信
服务治理和部署很难搞
如果是中小型 不太推荐 没啥必要 要付出很多额外代价
myyou
2018-03-22 11:58:39 +08:00
@nullen gRPC 也是基于 http 的只不过是 http2
feverzsj
2018-03-22 12:06:30 +08:00
微服务只适用于超大规模电商场景,其他 99.9%的业务场景都不适合
tairan2006
2018-03-22 12:33:30 +08:00
微服务只适用于大规模系统。

微服务会带来很多问题,比如分布式事务、CQRS 啥的,一个人能写的项目用微服务是作死。
akira
2018-03-22 12:58:25 +08:00
@MrMike 那结论很简单,微服务并不适合你。
nullen
2018-03-22 13:06:02 +08:00
@myyou 嗯,HTTP2 和 HTTP1 差别蛮大的。
包括前几天 Nginx 开始支持 gRPC,我觉得 gRPC 在实际中的应用案例会越来越多。
MrMike
2018-03-22 13:09:35 +08:00
@nullen
@akira
@tairan2006
@wqqdhero

好的,谢了各位。结贴了。
amon
2018-03-22 14:56:52 +08:00
上面很多都对微服务妖魔化了。
我个人觉得微服务对于中小项目也挺适合。
系统架构:单机 -> 集群 -> 微服务

一开始不一定要迈那么大步子,比如能将现有的单机架构的项目拆分为多个业务逻辑解耦的子项目。
wellsc
2018-03-22 14:59:46 +08:00
架构 != 框架
tanszhe
2018-03-22 15:12:24 +08:00
把问题复杂了,大方向朝着简单化发展就行。在一个项目觉得太复杂了 可以把独立性强的拆出来通过 http 接口来调用。当拆出来的模块比较多了之后 而且 运行每个服务的机器也比较多了 就需哟搞个注册中心 来统一管理各个模块了 一步步慢慢来,这些方案成熟的很,什么语言都无所谓 原理都一样
csl1995
2018-03-22 15:36:38 +08:00
将现有的系统微服务化的话,成本太高,如果系统不大不复杂还行,如果系统庞大那难度真的很大,不亚于将整个系统重构。如果这种情况的话建议还是多考虑下吧。
如果新开始一个系统确实可以考虑使用微服务,不同的模块使用不同的技术栈,后期的维护升级也相对于要简单(招对应技术栈的人即可)。
RainFinder
2018-03-22 15:44:38 +08:00
说 http 慢的,你们还停留在 1.1 ?再说 restful 本就是为 http 设计的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/440258

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX