V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
YUyu101
V2EX  ›  问与答

既然现在都搞 serverless,为什么不直接业务嵌入存储过程

  •  1
     
  •   YUyu101 · 2019-09-27 00:13:26 +08:00 · 3566 次点击
    这是一个创建于 1913 天前的主题,其中的信息可能已经有所发展或是发生改变。

    直接拿分布式数据库当载体,数据库里的函数暴露出来调用,数据库按业务分别建模,没有耦合,需要关系查询的时候,就是远程调用,这俩在业务里相当于同一件事,没有这个业务就相当于没有关系查询,连 sql,nosql 都不分了。

    20 条回复    2019-09-27 14:22:32 +08:00
    yidinghe
        1
    yidinghe  
       2019-09-27 00:32:49 +08:00 via Android
    首先存储过程不能应对分布式存储,其次 SQL 语言缺乏封装。你可以试下:

    建一张表,包含一个请求字段、一个回应字段再加上主键;写一个简单的程序往表里插入 HTTP 格式的请求,然后调用一个存储过程产生回应内容,然后取出来返回给浏览器,这就是一个简单的基于存储过程的 HTTP 服务器。你看你能利用存储过程将这个服务器实现到什么程度。
    whileFalse
        2
    whileFalse  
       2019-09-27 00:34:05 +08:00 via iPhone
    serverless 的优势是无限横向扩展。

    能无限横向扩展的数据库如何保证强一致?
    YUyu101
        3
    YUyu101  
    OP
       2019-09-27 02:13:47 +08:00 via Android
    @yidinghe 可以学 postgres 一样上别的语言写函数嘛,c,js,python 都可以。
    YUyu101
        4
    YUyu101  
    OP
       2019-09-27 02:29:06 +08:00 via Android
    @whileFalse 这是分布式本来要面对的问题,服务都拆分了,数据库不随着业务一起拆,那和水桶最短版一样了,数据库和业务接口合并作为最小单元,一致性由在代码中保证应该挺灵活吧,毕竟对外接口是你写的控制权在你手里,需要一致的地方一致,不需要一致的地方就缓存。我不是指业务要用 sql 实现,我想要数据库支持各种语言,自身变成一个自带存储,事务和服务的框架。
    cassyfar
        5
    cassyfar  
       2019-09-27 06:02:30 +08:00
    不太明白这样做的好处。

    意思是数据库扛下所有商务计算?感觉很不现实。但是某些简单的项目,也有这个趋势。比如静态网站可以直接部署在 S3 上,然后前面只需要一个简单的 Gateway。没有任何 web service。但是这个设计没法应付复杂计算,毕竟这个计算量,总得有个地方扛下来,而数据库,其实大家都避免放太多运算量进去,no sql 整个就是一个 hashtable 了。
    whileFalse
        6
    whileFalse  
       2019-09-27 07:51:21 +08:00 via iPhone
    @YUyu101 所以你还记得存储过程是为了什么目的设计出来的吗。
    如果只是说能随着 serverless 扩展的数据库,最接近的应该算是 cloudflare workers KV。这是一个非结构化数据库,对于每个 key 支持无限的读频率和每秒一次的写频率。

    你觉得有多少业务能完全由这样的数据库支撑?
    murmur
        7
    murmur  
       2019-09-27 07:59:54 +08:00
    答案是有的,真的有把业务全写进 sql 和存储过程的,美其名曰不重启热更新
    liuxey
        8
    liuxey  
       2019-09-27 08:07:08 +08:00
    你好,有的,而且我们做过,然后没有然后了
    passerbytiny
        9
    passerbytiny  
       2019-09-27 08:36:40 +08:00
    请先去了解一下分布式计算和分布式存储具体是什么,以及它们的区别,然后再去了解一下为什么人们不喜欢存储过程了。
    guoyang
        10
    guoyang  
       2019-09-27 08:39:04 +08:00
    FaaS 层不只是 CRUD,并且微服务、SOA 模式的 RPC 如何解决,怎样做到水平扩展,这都是问题。虽然我个人很看好 Serverless,但是它的普及是需要强大的基础设施作为保障的,还有很长的路需要走。
    LongMaoz
        11
    LongMaoz  
       2019-09-27 09:27:46 +08:00
    你好,我上家公司有的,业务全在存储过程里,后来进行修复 BUG 和业务变动的时候我当场辞职了
    monsterxx03
        12
    monsterxx03  
       2019-09-27 09:54:18 +08:00
    几十年前的商业系统都是这么做的...后来嘛...
    wysnylc
        13
    wysnylc  
       2019-09-27 10:34:25 +08:00
    你好,只有你这么想
    YUyu101
        14
    YUyu101  
    OP
       2019-09-27 12:32:51 +08:00 via Android
    @cassyfar 是想减少通讯成本,函数做运算总要有数据源吧,数据不是从别的函数来就是从数据库来,大量计算 io 都在本地做掉是不是很好,如果不需要用到数据库更好了,连数据库都省了。
    YUyu101
        15
    YUyu101  
    OP
       2019-09-27 12:38:12 +08:00 via Android
    @LongMaoz 如果某天有一个数据库的存储过程可以用任何语言写,并且可以下断点调试,是不是就爽了。
    huijiewei
        16
    huijiewei  
       2019-09-27 12:39:32 +08:00 via iPhone
    @YUyu101 sql server 十几年前就可以了,然而没有然而了
    YUyu101
        17
    YUyu101  
    OP
       2019-09-27 13:13:40 +08:00 via Android
    @monsterxx03 但是他们都是往一个数据库里塞的吧,我是想存储过程塞到各自的本地存储里,互相之间远程调用。
    acthtml
        18
    acthtml  
       2019-09-27 13:59:28 +08:00
    存储过程耦合业务,不利于需求变更。
    你说的分布式数据库是有项目这么做的。
    passerbytiny
        19
    passerbytiny  
       2019-09-27 14:06:54 +08:00
    散了吧,看楼主后面的回复,他说得是在本地( BS 模式的 B,CS 模式的 C,前后端的前端)运行的存储过程,这只存在于小孩子的想象,或者未来。
    YUyu101
        20
    YUyu101  
    OP
       2019-09-27 14:22:32 +08:00
    @passerbytiny 本地是指数据库所在服务器,不是客户端,客户端是消费服务的嘛。不然所有的函数要保存状态,要状态同步,不还得去调用存储服务嘛,与其假装无状态不如大家都有状态,要强一致就同步,不强一致就互相缓存
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2767 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:40 · PVG 16:40 · LAX 00:40 · JFK 03:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.