服务边界拆分 - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
2018yuli

服务边界拆分

  •  
  •   2018yuli Nov 2, 2023 2424 views
    This topic created in 926 days ago, the information mentioned may be changed or developed.

    求万能的群友支招:

    DataServer 需要 访问 ManagerServer 的设备基础信息,设备型号信息,且访问频率比较频繁(突发性 6 次查询每 10 秒)。但基本(设备和型号 信息)不会做太多的变更

    问题:

    1. 考虑保持 DataServer 的独立性,使其运行不依赖 ManagerServer 2. 考虑一定的性能扩展空间 3. 目前是使用 guava 在 DataServer 中做了一层 cache ,缓存 5 分钟 

    方案:

    1. 方案一:考虑在 DataServer 中做一个本地缓存?然后 ManagerServer 中修改后异步通知 DataServer 进行变更。 2. 方案二:在 ManagerServer 中做本地缓存 3. 方案三:ManagerServer 缓存给 Reids ,DataServer 做本地缓存和 Redis 两级缓存 4. 方案四:保持现状,并让 guava 中的 cache 可配置 

    ChatGPT 的回答

    1. 方案一:在 DataServer 中做本地缓存,然后 ManagerServer 中修改后异步通知 DataServer 进行变更。

      a. 优点:保持了 DataServer 的独立性,可以实现较高性能的本地缓存,缓存变更可以异步通知,减少对 ManagerServer 的依赖。

      b. 缺点:需要管理缓存一致性,确保通知机制可靠性。

    2. 方案二:在 ManagerServer 中做本地缓存。

      a. 优点:可以更好地控制数据变更和缓存的一致性,减少了 DataServer 的负担。

      b. 缺点:DataServer 的独立性较差,可能影响性能扩展。

    3. 方案三:ManagerServer 缓存给 Redis ,DataServer 做本地缓存和 Redis 两级缓存。

      a. 优点:结合了两级缓存,兼顾了性能和数据一致性,同时减轻了 DataServer 的负担。

      b. 缺点:增加了系统的复杂性和维护成本。

    4.方案四:保持现状,并让 Guava 中的缓存可配置。

    a. 优点:保持了现有的架构,较少的改动。 b. 缺点:如果需求变化,可能无法满足更高的性能和扩展需求。 

    综合考虑,我建议您可以考虑方案一或方案三,具体选择取决于您对数据一致性、性能扩展和系统复杂性的权衡。在实施选定方案时,确保进行充分的测试和监控,以确保系统运行稳定。另外,考虑使用缓存框架如 Redis 可以简化缓存的管理和一致性维护。

    大家觉得呢?

    个人看好方案二啊!或者,是不是服务拆分有误,DataServer 和 ManagerServer 就不该拆开。

    8 replies    2023-11-02 10:31:10 +08:00
    pnnanxu
        1
    pannanxu  
       Nov 2, 2023
    Data 自己缓存即可。Manager 直接用过 http 或者 grpc 访问 Data 的接口即可。
    lddsb
        2
    lddsb  
       Nov 2, 2023
    现在的性能瓶颈是在 DataServer 还是在 ManagerServer ?
    everyx
        3
    everyx  
       Nov 2, 2023
    直接给 ManagerServer 上 Redis 缓存不行么?量小就单机 Redis ,大了可以组集群。

    ManagerServer 中信息的更新少,访问频次高,那在前面做一层缓存肯定是比较合适的,命中率高,数据更新后让缓存失效再更新就行了。而 DataServer 对于数据的准确性和实时性有要求,在 DataServer 侧做缓存觉得没必要,如果是怕 DataServer 的请求对 ManagerServer 的压力过大吗?横向扩展缓存层就行了。
    xwayway
        4
    xwayway  
       Nov 2, 2023
    managerServer 用个 redis 缓存,dataServer 做个本地缓存就行了啊,为啥还需要两级缓存呢
    irrigate2554
        5
    irrigate2554  
       Nov 2, 2023
    谁性能不行就缓存谁 ManagerServer 上缓存,如果上到 DataServer 后面如果加个 OrderServer 也访问这个接口那还慢。
    xwayway
        6
    xwayway  
       Nov 2, 2023
    @xwayway #4 这么做的目的是,managerServer redis 缓存,既能应对突发的流量冲击,又能保证自己服务吐出的数据的一致性。dataServer 做本地缓存是为了减少对外部服务的频繁调用。
    当然只在 managerServer 做缓存是最简单的,不用管理两次缓存,我觉得缓存一定是优先放在数据提供端,谁提供数据,谁负责缓存,保不准外部服务怎么调用(如果是不同团队在调用这个服务的数据)。
    方案一的缓存通知方案,为了用而用?
    2018yuli
        7
    2018yuli  
    OP
       Nov 2, 2023
    感谢万能的群友
    2018yuli
        8
    2018yuli  
    OP
       Nov 2, 2023
    @lddsb 暂时没有性能瓶颈,Mysql 撑得住。单纯想加缓存。Data 端不到 100 QPS ,先去掉 Data 中的 Guava 缓存,改为 Manager 做 Redis 缓存了。后面再改。
    About     Help     Advertise     Blog     API     FAQ     Solana     954 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 22:59 PVG 06:59 LAX 15:59 JFK 18:59
    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