V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zjsxwc
V2EX  ›  程序员

什么是微服务啊?

  •  
  •   zjsxwc ·
    zjsxwc · 2018-03-22 09:16:43 +08:00 · 5844 次点击
    这是一个创建于 2437 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看网上的描述看不懂,模棱两可的样子。谁来解释下什么是微服务?

    32 条回复    2018-03-23 02:51:50 +08:00
    znood
        1
    znood  
       2018-03-22 09:27:04 +08:00 via iPhone   ❤️ 1
    微服务是一种架构方法,将传统应用拆分成各个独立的模块(微服务)运行,并且模块间通过 Restful 或 rpc 方式通信,模块可单独部署、更新、重启等。
    常用于容器化部署,Docker,Kubernetes。楼主也可了解下云原生。
    zjsxwc
        2
    zjsxwc  
    OP
       2018-03-22 09:33:25 +08:00
    @znood

    也就是说用了 rpc 的就是微服务。

    rpc==微服务?
    sundev
        3
    sundev  
       2018-03-22 09:36:10 +08:00
    微服务就跟 Moto Z 手机的一个模块一样。
    caixiexin
        4
    caixiexin  
       2018-03-22 09:37:20 +08:00 via Android
    把业务模块尽量按照单职责划分,代码,依赖做到尽可能简单,能够快速部署快速摘除
    坏处是模块会非常多,部署可能是灾难,所以出现了 devops 岗位。
    caixiexin
        5
    caixiexin  
       2018-03-22 09:38:55 +08:00 via Android
    可以理解成是分布式服务的一种演进
    p2pCoder
        6
    p2pCoder  
       2018-03-22 09:42:09 +08:00
    大数据风控部门:
    每个月都有新接入的数据源,需要实时处理
    每个月也有新的模型建立用于风控
    每个数据源又要处理后,对接入相应的 BI 或者学习模型
    这种业务场景,就需要微服务
    znood
        7
    znood  
       2018-03-22 09:45:51 +08:00 via iPhone
    @zjsxwc 不是,rpc 只是一种通信方式
    paragon
        8
    paragon  
       2018-03-22 09:49:19 +08:00
    等你用到的时候就知道了 ~
    Mazexal
        9
    Mazexal  
       2018-03-22 10:00:50 +08:00
    把之前大型系统里的功能单独抽出来, 就是微服务了
    zjsxwc
        10
    zjsxwc  
    OP
       2018-03-22 10:06:21 +08:00
    @znood

    那么最简单最常见的只是在程序进程内通过面相语言的类实例间相互调用业务类方法这种方式的架构, 而不用 rpc、restfull api 的通讯的能不能做微服务?
    th00000
        11
    th00000  
       2018-03-22 10:11:08 +08:00   ❤️ 1
    比如说你玩魔兽世界要打 20 人战场了, 主服务会将玩家数据打包丢给战场服务器的集群, 将玩家的登陆状态部分切换到战场服务器, 玩家就在战场服务集群上进行战斗, 战斗完毕之后集群返回战斗结果给主服务, 再将部分玩家登陆状态切换回来, 就可以理解为一个简单的微服务架构
    th00000
        12
    th00000  
       2018-03-22 10:13:33 +08:00
    又或者你要打怪之后, 怪物要进行掉落物品, 因为掉落模块的逻辑是所有的服务器共享的, 所以可以将掉落的服务单独拉出来进行集群, 当任何服务器要进行大怪掉落的时候, 将掉落分组, 掉落 id 等抛给掉落服务集群, 掉落服务会将掉落的物品 ID 列表返回给调用服务, 由主服务将掉落的物品加到你的背包里, 这也是微服务的架构
    znood
        13
    znood  
       2018-03-22 10:14:21 +08:00 via iPhone
    @zjsxwc 肯定不是的,微服务是独立进程。
    微服务没有官方的定义,只是社区催生出来的一个理念,你理解了就理解了不理解就再看看。关于具体的产品架构还是看设计。
    zjsxwc
        14
    zjsxwc  
    OP
       2018-03-22 10:17:46 +08:00
    @th00000 #11

    @znood #13


    所以微服务就是由原来单进程(可以多子进程) 变成了 独立多进程 ?
    whypool
        15
    whypool  
       2018-03-22 10:23:59 +08:00
    部署是灾难,有时候不晓得哪个服务 gg 了,线上先报错了,然后排查重启
    wweir
        16
    wweir  
       2018-03-22 10:30:12 +08:00 via iPhone
    高内聚,低耦合
    耦合低到一定程度就可以仅仅只用几个 rpc 调用来解决,这样按模块裁成组件。
    结合调度服务,实现高度的可用性及资源的合理分配

    说到底还是通过降低开发难度,来提高服务可靠性,同时降低硬件成本
    moka20477
        17
    moka20477  
       2018-03-22 10:39:09 +08:00
    最简单的说就是从一开始就是大家的目标就是把服务无限的细化拆分,以让其保证最大的低耦合,但是一大堆服务的部署,监控,治理是个极其复杂的事情,近几年微服务火起来了是因为众多技术让微服务治理变成了可能,所以微服务没什么复杂的,就是服务细化拆分而已,真正大家讨论的都是“微服务治理”
    lesxc
        18
    lesxc  
       2018-03-22 10:42:13 +08:00
    以淘宝购物为例(不考虑细节):
    1. 访问首页时,A 服务来提供页面展示。A 服务只提页面的快速展示
    2. 搜索商品时,B 服务来提供搜索的细节,同时向页面展示商品列表
    3. 用户登录, C 服务提供用户登录,包括移动端、pc 端、淘宝账号、支付账户等
    4. 支付环节, D 服务提供支付,支付成功后返回商家和用户信息。

    以上只包括最简单的流程 ,还有物流、个性推荐、服务治理、业务监控等等各种后台服务。这些服务都布署在单独的服务器上通过 rpc 来调用来完成一次完整购物流程 。
    asaxing
        19
    asaxing  
       2018-03-22 11:01:23 +08:00
    借楼问一下有什么开源的微服务项目吗
    NoahNye
        20
    NoahNye  
       2018-03-22 12:06:47 +08:00 via iPhone
    很想用现在 EA 的 dlc 比喻
    feverzsj
        21
    feverzsj  
       2018-03-22 12:08:21 +08:00
    你不需要微服务
    pathbox
        22
    pathbox  
       2018-03-22 12:57:30 +08:00 via iPhone
    你要做的是多看书,而且不仅看微服务的书
    print1024
        23
    print1024  
       2018-03-22 13:51:29 +08:00
    @asaxing http://www.spring4all.com/ 这里大部分都是
    ShareDuck
        24
    ShareDuck  
       2018-03-22 14:00:42 +08:00 via Android
    大概说一下,例如你要做个 xx 系统的网站,里面包含用户管理等功能,现在你把用户管理这一块单独做成一个独立的网站,独立上线,需要用到这个功能的其他系统调用这个“微服务”就好了。
    asaxing
        25
    asaxing  
       2018-03-22 14:10:48 +08:00
    @print1024 谢谢, 不过有用 Python 的吗, 不会 Spring
    p2pCoder
        26
    p2pCoder  
       2018-03-22 14:27:53 +08:00
    @asaxing python 的话,有 zk consul eureka 的相关包,不过,仅限服务注册 发现与健康检测值了
    zhu327
        27
    zhu327  
       2018-03-22 15:06:38 +08:00
    asaxing
        28
    asaxing  
       2018-03-22 15:30:32 +08:00
    @p2pCoder
    @zhu327 谢谢, 我了解一下
    solaro
        29
    solaro  
       2018-03-22 17:15:40 +08:00
    说白了就是 rpc + rpc + rpc
    southsala
        30
    southsala  
       2018-03-22 18:29:57 +08:00
    就是纵向解耦啊
    hardman
        31
    hardman  
       2018-03-22 19:26:47 +08:00 via Android
    spring clond 了解下
    Bluecoda
        32
    Bluecoda  
       2018-03-23 02:51:50 +08:00   ❤️ 2
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2818 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:13 · PVG 21:13 · LAX 05:13 · JFK 08:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.