微服务的事件通知里,如何设计事件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yixinlove
V2EX    程序员

微服务的事件通知里,如何设计事件

  •  
  •   yixinlove 2019-03-21 23:37:25 +08:00 3154 次点击
    这是一个创建于 2402 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT。

    背景: 需要设计一个微服务的事件通知,通知会发送到 Kafka,其他感兴趣的微服务自动消费。当前各个微服务可以通过 RPC,或者 REST 调用,或者直接访问 DB 获取数据(有些可能有限制)。

    想法是把这个事件设计的尽量简单,但是不知道需要考虑哪几个方面,请大神指教。

    自身考虑的几个点是:

    1. 如果允许通过唯一标识拿到最新的数据,是不是只需要事件包含三个基本信息就行:唯一标识、操作类型和出发事件;
    2. 如果考虑服务之间尽量少调用(或者说减少数据库的 QPS ),在事件里包含了尽量多的信息,譬如更新,包含更新了哪个字段,什么值这类。为了做到尽量简单,那么在前期只能说综合已有业务考虑,把需要的字段都加进来。

    现在组里的大佬是倾向于第一种,但是这种应该需要通过唯一标识拿一次详细数据(不管是 RPC、RESTful 还是数据库直接查),都会对服务方或者数据库产生压力,不确定这种方式是否最优。

    不知对于这种事件的设计是从哪几个方面考虑的?我自己的考虑有什么问题?请大佬不吝赐教。

    9 条回复    2019-03-22 20:51:05 +08:00
    mooncakejs
        1
    mooncakejs  
       2019-03-22 00:20:46 +08:00
    通过主键拿数据,数据库没什么压力的,如果是 nosql 压力就更小了
    yixinlove
        2
    yixinlove  
    OP
       2019-03-22 08:59:41 +08:00
    @mooncakejs 我在想,作为微服务架构,应该是避免这种直接数据库查询,可能更多的是通过 RPC/webservice 这类来获取数据。如果是这样,数据量大,那对于服务端压力会增加不少。
    joesonw
        3
    joesonw  
       2019-03-22 10:09:00 +08:00
    @yixinlove 读的操作哪有压力, 扛不住了就前面加个 redis 缓一下, 纯 mysql 还有各种只读从库的实现呢
    blessyou
        4
    blessyou  
       2019-03-22 10:52:27 +08:00 via Android
    看过一本微服务的书 服务之间调用尽量通过 rpc 调用 而不是读其他服务的库
    mooncakejs
        5
    mooncakejs  
       2019-03-22 12:54:52 +08:00 via iPhone
    @yixinlove 微服务里面就不读数据库了?
    yixinlove
        6
    yixinlove  
    OP
       2019-03-22 14:17:52 +08:00
    @mooncakejs 按理说拆分成微服务,应该要尽量减少对其他服务数据库的访问吧,这样能减少依赖
    snappyone
        7
    snappyone  
       2019-03-22 14:43:40 +08:00
    在没有性能压力情况下可以先不考虑这个,正确地实现即可
    mooncakejs
        8
    mooncakejs  
       2019-03-22 17:22:46 +08:00
    @yixinlove 读数据库不一定是直连啊,通过 api 也会读数据库
    yixinlove
        9
    yixinlove  
    OP
       2019-03-22 20:51:05 +08:00
    @mooncakejs 是的,通过 API ( RPC / RESTful )耦合度没那么高,因为数据都是有业务组装,如果是直连数据库那耦合度就非常高了,两个服务的升级有可能会互相影响。

    大佬觉得这种事件的设计,应该如何去平衡呢?是尽量在消息实体里包含足够多的信息,避免再次调用 API 查询,还是说直接只发送唯一标识这类,如果需要数据再去查。

    我现在比较迷糊的是不知道如何去抉择,或者应该根据什么去抉择。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2885 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 06:13 PVG 14:13 LAX 23:13 JFK 02:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86