Web30 App 的设计架构,看这一篇就够了
先来回顾下 Web2.0 应用程序架构,一图胜千言:
图示是对大多数 Web 2.0 应用程序如何工作的一个很好的抽象总结。以一个博客平台为例:
其次 ,要有后端代码(用 Node.js、Java 或 Python 等语言编写),用于定义业务逻辑;
第三 ,还要有前端代码(通常用 JavaScript、HTML 和 CSS 编写),用于实现 UI 和交互;
这些代码都托管在集中式服务器上。
视角来到 Web3.0 ,消除了中心化,没有集中式的数据库,没有存放后端代码的集中式 Web 服务器。采用了区块链技术,在互联网上的匿名节点维护的分布式 状态机 上构建应用程序。
“状态机”是指一台机器,它维护一些给定的程序状态、以及该机器上允许的未来状态,它具有非常严格的规则(即共识)来定义状态如何转换。
没有一个实体可以控制这个分布式的状态机 —— 它由网络中的每个人共同维护。
后端逻辑代码化身成状态机上的“智能合约”,这是开源的。
前端部分呢?暂按下不表,先看此时数据库、后端代码演变后的架构图:
再进一步看看这些新颖的概念:
ethereum blockchain,以太坊区块链,被认为是“世界计算器”,一个可全局访问的状态机,对等节点网络维护,状态的更改遵循共识规则的约束;只要是写入了数据,就会被记录,数据不能再更新回去;智能合约:以太坊上运行的程序,由高级编程语言编写,例如 Solidity 或 Vyper;任何人都能检查智能合约是否合理;
EVM 虚拟机,用于执行合约的环境,相当于执行引擎;OK,视野来到了前端代码部分。按道理将,前端代码应该也是用智能合约的方式实现,实际上,它也确实如此,不过要更为复杂一点。
当我们想要与区块链上的数据和代码进行交互时,我们需要与这些节点中的一个进行交互。任何节点都可以广播在 EVM 上执行交易的请求,然后矿工将执行交易并将结果状态更改传播到网络的其余部分。
广播新交易有两种方式:
设置自己运行以太坊区块链软件的节点;使用Infura、 Alchemy和Quicknode等第三方服务提供的节点;借助第三方节点可能会更轻松一点,它的逻辑是这样的:
每个以太坊客户端(即提供者)都实现了 JSON-RPC 规范。这确保了当前端应用程序想要与区块链交互时,有一组统一的方法。JSON-RPC 是一种无状态、轻量级的远程过程调用 (RPC) 协议,定义了多个数据结构及其处理规则。它与传输无关,可以通过多种方式传输,比如 HTTP、套接字、其它传输环境,JSON (RFC 4627) 作为一种数据格式。
还有一个很重要的东西,进行身份验证,鉴权。通常借助 Metamask 实现;
Metamask 将用户的私钥存储在浏览器中,每当前端需要用户签署交易时,它就会调用 Metamask。
将所有内容都存储在区块链上是很昂贵的,更新数据都需要收费,所以还有一个 去中心化的链下存储解决方案 —— IPFS/Swarm
架构图如下:
IPFS/Swarm 是用于存储和访问数据的分布式文件系统,你可以轻松去检验它。
到目前为止,我们已经讨论了如何写入,那如何读取数据呢?
答案是借助 The Graph,The Graph 是一种链下索引解决方案,可以更轻松地查询以太坊区块链上的数据。前端工程师可以直接调用,这比传统的 REST API 更具有吸引力。
现在,Dapp 架构如下:
截至目前,架构图已初成雏形。
引申补充,完整的实现上图这一架构,成本有点高昂。所以,有一种流行的扩展方案 —— L2 scaling 解决方案
在侧链操作,然后提交到主链。
这样既节约成本,又能达到目的,真是大聪明。
本瓜就把这个侧链执行,理解为代码的预编译吧,编译后再放到浏览器引擎上做真正的编译执行。
附:以上框架的开发工具是 Hardhat本篇就是完整的“浅析 Web3.0 DApp(去中心化应用程序)设计架构”。
以上!作为入门级架构浅析,说的真的很通透了!三连了!
我是掘金安东尼: 一名人气前端技术博主(文章 100w+ 阅读量)
终身写作者(INFP 写作人格)
坚持与热爱(简书打卡 1000 日)
我能陪你一起度过漫长技术岁月吗(以梦为马)
觉得不错,给个三连吧(这是我最大的动力 )
程序员进阶必备的十种软件架构模式技巧
专注于Java领域优质技术号,欢迎关注
有没有想过要设计多大的企业规模系统?在主要的软件开发开始之前,我们必须选择一个合适的体系结构,它将为我们提供所需的功能和质量属性。因此,在将它们应用到我们的设计之前,我们应该了解不同的体系结构。
什么是架构模式?
根据维基百科中的定义:
架构模式是一个通用的、可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题。架构模式与软件设计模式类似,但具有更广泛的范围。
在本文中,将简要地解释以下10种常见的体系架构模式,以及它们的用法、优缺点。
1. 分层模式
2. 客户端-服务器模式
3. 主从设备模式
4. 管道-过滤器模式
5. 代理模式
6. 点对点模式
7. 事件总线模式
8. 模型-视图-控制器模式
9. 黑板模式
10. 解释器模式
一. 分层模式
这种模式也称为多层体系架构模式。它可以用来构造可以分解为子任务组的程序,每个子任务都处于一个特定的抽象级别。每个层都为下一个提供更高层次服务。
一般信息系统中最常见的是如下所列的4层。
· 表示层(也称为UI层)
· 应用层(也称为服务层)
· 业务逻辑层(也称为领域层)
· 数据访问层(也称为持久化层)
使用场景:
· 一般的桌面应用程序
· 电子商务Web应用程序
二. 客户端-服务器模式
这种模式由两部分组成:一个服务器和多个客户端。服务器组件将为多个客户端组件提供服务。客户端从服务器请求服务,服务器为这些客户端提供相关服务。此外,服务器持续侦听客户机请求。
使用场景:
· 电子邮件,文件共享和银行等在线应用程序
三. 主从设备模式
这种模式由两方组成;主设备和从设备。主设备组件在相同的从设备组件中分配工作,并计算最终结果,这些结果是由从设备返回的结果。
使用场景:
· 在数据库复制中,主数据库被认为是权威的来源,并且要与之同步
· 在计算机系统中与总线连接的外围设备(主和从驱动器)
四. 管道-过滤器模式
此模式可用于构造生成和处理数据流的系统。每个处理步骤都封装在一个过滤器组件内。要处理的数据是通过管道传递的。这些管道可以用于缓冲或用于同步。
使用场景:
· 编译器。连续的过滤器执行词法分析、解析、语义分析和代码生成
· 生物信息学的工作流
五. 代理模式
此模式用于构造具有解耦组件的分布式系统。这些组件可以通过远程服务调用彼此交互。代理组件负责组件之间的通信协调。
服务器将其功能(服务和特征)发布给代理。客户端从代理请求服务,然后代理将客户端重定向到其注册中心的适当服务。
使用场景:
· 消息代理软件,如Apache ActiveMQ,Apache Kafka,RabbitMQ和JBoss Messaging
六. 点对点模式
在这种模式中,单个组件被称为对等点。对等点可以作为客户端,从其他对等点请求服务,作为服务器,为其他对等点提供服务。对等点可以充当客户端或服务器或两者的角色,并且可以随时间动态地更改其角色。
使用场景:
· 像Gnutella和G2这样的文件共享网络
· 多媒体协议,如P2PTV和PDTP
· 像Spotify这样的专有多媒体应用程序
七. 事件总线模式
这种模式主要是处理事件,包括4个主要组件:事件源、事件监听器、通道和事件总线。消息源将消息发布到事件总线上的特定通道上。侦听器订阅特定的通道。侦听器会被通知消息,这些消息被发布到它们之前订阅的一个通道上。
使用场景:
· 安卓开发
· 通知服务
八. 模型-视图-控制器模式
这种模式,也称为MVC模式,把一个交互式应用程序划分为3个部分,
· 模型:包含核心功能和数据
· 视图:将信息显示给用户(可以定义多个视图)
· 控制器:处理用户输入的信息
这样做是为了将信息的内部表示与信息的呈现方式分离开来,并接受用户的请求。它分离了组件,并允许有效的代码重用。
使用场景:
· 在主要编程语言中互联网应用程序的体系架构
· 像Django和Rails这样的Web框架
九. 黑板模式
这种模式对于没有确定解决方案策略的问题是有用的。黑板模式由3个主要组成部分组成。
· 黑板——包含来自解决方案空间的对象的结构化全局内存
· 知识源——专门的模块和它们自己的表示
· 控制组件——选择、配置和执行模块
所有的组件都可以访问黑板。组件可以生成添加到黑板上的新数据对象。组件在黑板上查找特定类型的数据,并通过与现有知识源的模式匹配来查找这些数据。
使用场景:
· 语音识别
· 车辆识别和跟踪
· 蛋白质结构识别
· 声纳信号的解释
十. 解释器模式
这个模式用于设计一个解释用专用语言编写的程序的组件。它主要指定如何评估程序的行数,即以特定的语言编写的句子或表达式。其基本思想是为每种语言的符号都有一个分类。
使用场景:
· 数据库查询语言,比如SQL
· 用于描述通信协议的语言
体系架构模式的比较
下面给出的表格总结了每种体系架构模式的优缺点。
http://www.techug.com/post/10-common-software-architectural-patterns-in-a-nutshell.html
相关问答
web 端常用 架构 ?一、单DB架构单DB架构一般就是nginx直接upstream请求到后端Tomcat,扩容时基本是增加新的Tomcat实例,然后通过Nginx负载均衡upstream过去,此时数据库还不...
电子商务 解决方案的基础 架构 包括哪几个部分..._电子商务_帮考网硬件基础架构:包括服务器、网络设备、存储设备等。2.软件基础架构:包括操作系统、数据库、Web服务器...2.软件基础架构:包括操作系统、数据库、W...
网页版程序是什么 架构 ?网页版程序是web架构。web开发的特点是:没有太复杂的技术难点,一切在于迅速的把握需求,其实这正式敏捷开发的要旨所在,一切都可以非常快速的建立,非常快速...
webrtc 架构 详解?webrtc是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。web...
网页是什么 架构 ?后端通过与数据库交互来获取、存储和更新数据。总体来说,网页的架构是一个前后端分离的结构,前端负责展示和交互,后端负责处理业务逻辑和数据操作。这种架构...
一个SAAS系统服务平台(前后端+中台)的最佳开发 架构 是?SpringBoot是Java开发时常用框架,有非常丰富的组件和易用的功能。为了满足实际需求,应用于生产的Web项目功能和架构都日趋复杂:多层架构,数据中台,动静分...(2)...
bard用的什么 架构 ?Bard是一个开源的数据可视化工具,它使用了现代化的Web架构。它的前端部分使用React框架,通过JavaScript和HTML构建用户界面。后端部分使用Node.js作为服务器端...
当前java web 开发用得一般都是哪些框架?二、Spring框架Spring是一个强大而又“轻量级”的Java开发框架,之所以打引号是因为感觉并不是那么轻量。Spring的主要目的在于简化Java应用开发,以配置方式代...
互联网产品云服务 架构 运维如何规划?三,云监控CloudMonitor主流云服务商都将监控功能集成到了基础架构中,以阿里云为例,云监控提供了多种配置,多维度全方位监控。比如配置CPU使用率到达85%时...在...
网站制作的网站 架构 是什么?[回答]网站架构是一个网站,如建筑本身,涉及到技术,美学和功能的标准设计和规划方法。传统建筑,重点是正确的用户和用户的要求。这需要特别注意的网页内容,...