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

2019-09-27 00:13:26 +08:00
 YUyu101

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

3539 次点击
所在节点    问与答
20 条回复
yidinghe
2019-09-27 00:32:49 +08:00
首先存储过程不能应对分布式存储,其次 SQL 语言缺乏封装。你可以试下:

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

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

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

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

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

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

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

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

© 2021 V2EX