目前架构有几个热点方向:微服务, dubbo, Faas,还有 TiDB

现在开发模式是前后端分离基本成为行规。

应该说以大部分企业业务量级、人员规模来说,要去和淘宝等大厂去对标是非常傻的。对大部分企业来说 LAMP 就够了,要是聪明点把 M 换成 P,那 ElasticSearch 什么的就都省了。

那么这些企业为何要跟风呢? 原因很简单,确实他们有爆发的可能,而一旦爆发后IT建设扛不住压力,就会导致流失的客户再也不回来。人人网曾经有过这样的故事,最近也见过几个这样的案例。可伸缩架构对他们来说的确非常重要。

微服务

微服务架构的优势在哪儿?

我曾经接触过一个死活要搞微服务的公司。他的看法是,项目大了每次部署都要花很久打包,要升级就得重启服务器,所有服务都要停,所以微服务是必须的。

当然,他肯定不知道 d2js 这种扔上去就能完成部署的技术,相似的 php 等等应该也不太了解。

其实微服务这种技术充满了缺点,它把一个产品变成了一堆产品,把内部问题变成了外部问题。上微服务更多的是一个管理需要而不是技术需要。

微服务解决了哪些问题呢?

首先,微服务拆分简单粗暴,在实践中所谓架构师只要若有所思的把传统意义上的功能模块切成微服务就行,一个项目就这样变成了好几个。

这样新招来的十几个人分两个三个组,各自领一个微服务去开发。库也不共用,也不需要共享业务级别的类库。前期成本为零,开发完了靠沟通磨合完成服务对接。

各个项目互为黑匣子,这样每个组想用什么技术用什么技术,各有各的 POM,包冲突什么也不存在了。既然模块功能单一,包名是叫 com.nb.service.payment 好还是叫 com.nb.payment.service 好也不用思考了,毕竟你手里只有 payment。

这个角度微服务的擦屁股版就是所谓中台。

微服务上线后出什么问题也很好查,先找到问题在哪个微服务,揪出相关责任人就行,这样一来其他人就不会被午夜骚扰。

由此可见,微服务其实主要解决的是管理问题,或者说开发模式问题。

微服务的问题有哪些呢?

  1. 一旦采用微服务,许多调用就变成远程调用,成本很高,协调成本也很高。
  2. 微服务对数据库的治理采用一个服务一个库的模式,也导致更高的数据库维护成本,只能便宜云厂商。
  3. 采用微服务后, 程序员越来越沦为 coder, 对产品全局的把握越来越低下
  4. 协调成本很高, 从以往靠代码变为靠文档. 收到接口首先要验收一遍.
  5. 必须上笨重复杂的分布式架构,系统复杂性度大幅上升

dubbo、SpringCloud 等

由于微服务拆分把任何小系统都变成了若干个分布式系统的邦联, 导致以往只有跨系统边界才有的分布式事务等等成为必需品, 分布式架构, TCC, Raft 等等成为显学.

为此就需要引入一些能实现 TCC 的模块, 这就是 dubbo, SpringCloud 等。

这些技术给我带来的感觉特别重,我的预感是会像 EJB 一样过时,让人很难深入进去。

FaaS Servless

函数即服务,和 d2js 的理念很相似。FaaS 彻底把作为业务的主体(业务函数)和作为容器的主体(单节点或分布式系统)彻底切割了。

平台归平台,业务归业务。这是 d2js 设计一个主要初衷。

FaaS 的事件/函数模式和 d2js 也很像,可以说 d2js 往前走一步就是 FaaS。在实践中我也用 crontab 调 URL 的方式实现定时触发 d2js 任务函数,也用 activiti 调用 URL 来触发 d2js 流程处理函数。

相信未来应该属于 FaaS。d2js 应当迅速演进到 FaaS。

FaaS 能不能覆盖所有业务场景呢?无部署的模式不适合一些重量级的算法复杂演算繁多的应用。

Q. 能不能把这种应用的接口视为 F,程序主体视为依赖包呢?
A. 这么理解是不合适的,这些所谓的依赖包需要追随 F 部署,不具备稳定性,不能视为一种东西。并且这些包对环境依赖较高,有的需要 GPU,有的需要自己的 db, 有的需要文件存储,不像 F 可以轻易的迁移。所以像这些服务还是用微服务来实现会比较好。当然,一旦它们能中立的定型下来,转为`F + 依赖包`也未尝不可。

目前的 FaaS 主要问题有:

  1. 函数粒度太小,一个函数即使加上一些 annotation,能表达的东西也是很少的。由于部署不在一处,这种函数和其它函数之间不能简单的互相引用。这和 C# 只有闭包而缺乏匿名内部类的问题相似,单个函数无法形成 bundle,无法形成一组接口这样的概念,组之间需要共享一部分组内数据。
  2. 分布式事务缺失。我看不到容器对分布式事务有任何支持, 因为编写 F 都不需要给相应实现.

TiDB

TiDB 是我通过 LSTM Tree + RDBMS 找到的。PG 也有一个实现,叫 VidarDB. TiDB的应用在国内已经非常广泛了, VidarDB有待检验。

可以说,TiDB 彻底解决了分布式数据库的问题。分布式架构最终形成分布式平台,而不是人人都研究分布式,这才是正道。

如将 LAMP 模型里的 M 换成 TiDB,是不是可以解决今天的问题呢?

A 现在是 NGINX

M 现在是 TiDB

P 现在是 d2js

LNTD 这样的组合,要应付大并发,还需要做这样的改进:

  1. d 所依赖的容器应更换成 vertx 或其它高性能框架,这样 RPS 可以做到极高
  2. 其次,这种容器最好是分布式的容器,这样 d 就不用担心伸缩性
  3. 同样需要 cache 降低数据库压力,需要 MQ 用于削峰。

当然,配合分布式容器,d2js 也应改进 TCC 特性,以及更加专门 FaaS 事件驱动绑定。

有了这些改进,d2js 会是一个非常好用的 FaaS 实现方案。

架构发展趋势以及 d2js 的未来的更多相关文章

  1. WOT干货大放送:大数据架构发展趋势及探索实践分享

      WOT大数据处理技术分会场,PingCAP CTO黄东旭.易观智库CTO郭炜.Mob开发者服务平台技术副总监林荣波.宜信技术研发中心高级架构师王东及商助科技(99Click)顾问总监郑泉五位讲师, ...

  2. 大数据时代的新BI系统架构发展趋势

    商业智能(BI,Business Intelligence).它是一套完整的解决方式,用来将企业中现有的数据进行有效的整合,高速准确的提供报表并提出决策根据.帮助企业做出明智的业务经营决策.     ...

  3. InfoQ一波文章:菜鸟核心技术/Intel发布CPU新架构3D堆栈法/BDL/PaddlePaddle/百度第三代Spider/Tera

    菜鸟智慧新物流核心技术全解析   孟靖 阅读数:63192018 年 12 月 14 日 16:00   2018 年天猫双 11 全球狂欢节已正式落下帷幕,最终成交额定格在 2135 亿元,物流订单 ...

  4. .net 大型分布式电子商务架构说明

    .net大型分布式电子商务架构说明 背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便 ...

  5. Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!)

    Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!) [美]]Peter Morville(彼得·莫维尔)  Louis Rosenfeld(路易斯·罗森菲尔德) ...

  6. E8.Net 工作流二次开发架构平台

    一.          产品简介 E8.Net工作流开发架构是基于微软.Net技术架构的工作流中间件产品,是国内商业流程管理(BPM)领域在.Net平台上的领先产品,是快速搭建流程管理解决方案的二次开 ...

  7. NoSQL架构实践

    经常有朋友遇到困惑,看到NoSQL的介绍,觉得很好,但是却不知道如何正式用到自己的项目中.很大的原因就是思维固定在MySQL中了,他们问得最多的问题就是用了NoSQL,我如何做关系查询.那么接下来,我 ...

  8. net大型分布式电子商务架构

    net大型分布式电子商务架构 背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维 ...

  9. .net大型分布式电子商务架构说明(转载来自<头条>)

    背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 架构演变 基础框架剥 ...

  10. 云存储的未来:Scale Up还是Scale Out?

      云存储的几十年发展历程,其计算架构模型,也从Scale Up走向Scale Out.但是展望未来数字世界的海量需求,目前流行的模型还能够持续满足吗?本文通过对云存储历史的回顾,及对Scale Up ...

随机推荐

  1. SublimeText配置Markdown编辑及预览

    概述 本文详细介绍了如何配置Sublime Text及相关插件,使之成为Markdown编辑器并且能够在浏览器中实现预览功能. 所需工具 Sublime Text + Package Control ...

  2. 技术分享 | 徐轶韬:从MySQL5.7升级到MySQL 8.0

    在6月20日举办的[墨天轮数据库沙龙-MySQL 5.7 停服影响与应对方案]中,甲骨文MySQL解决方案首席工程师徐轶韬分享了<从MySQL5.7升级到MySQL 8.0>主题演讲,本文 ...

  3. 墨天轮访谈 | OceanBase 白超:海量数据管理,为什么选择OceanBase?

    分享嘉宾:白超(大窑) OceanBase解决方案架构师.前蚂蚁集团数据库团队DBA专家 整理:墨天轮社区 导 读 大家好,我是白超(花名:大窑),在过去的几年中,作为蚂蚁集团数据库SRE团队成员,经 ...

  4. 实例:([Flappy Bird Q-learning]

    目录 实例:(Flappy Bird Q-learning) 问题分析 关于Q 训练 成果 实例:(Flappy Bird Q-learning) 问题分析 让小鸟学习怎么飞是一个强化学习(reinf ...

  5. MidJourney新手攻略

    目录 MidJourney简介 MidJourney的使用 1. 加入Discord 2. 选择一个频道 3. 使用/imagine来输入提示 4. 等待一分钟左右,会输出四张图 5. 查看结果 Re ...

  6. 云原生周刊:Kubernetes v1.27 发布 | 2023.4.17

    开源项目推荐 Palaemon Palaemon 是一个开源开发工具,用于监控 Kubernetes 集群的健康状况和资源指标并分析内存不足 (OOMKill) 错误. Gitkube Gitkube ...

  7. nginx实现资源文件动静分离的记录

    Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离.严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat ...

  8. 物理实验霍尔效应判断P/N型半导体笔记

    最近这不要物理实验期末考试了嘛,我火速抄起实验书准备复习. 复习到霍尔效应判断P/N型半导体这一部分时很惊奇地发现网上一会儿还搜不出个明了的总结,也有很多误导性的判断方法.Σ( ° △ °|||)︴ ...

  9. P9119 [春季测试 2023] 圣诞树

    参考博客: 春季测试 2023] 圣诞树 题解 - 洛谷专栏 (luogu.com.cn) 题意:给定二维平面上一个凸多边形的 \(n\) 个顶点, 求一种方案,使得从最高点开始,不重复地经过所有点后 ...

  10. .NET Core 泛型底层原理浅谈

    简介 泛型参考资料烂大街,基本资料不再赘述,比如泛型接口/委托/方法的使用,逆变与协变. 泛型好处有如下几点 代码重用 算法重用,只需要预先定义好算法,排序,搜索,交换,比较等.任何类型都可以用同一套 ...