微服务架构设计的初次尝试——基于以太坊智能合约 + NestJS 微服务的游戏社区与任务市场系统:架构设计
TMDOG微服务架构设计的初次尝试——基于以太坊智能合约 + NestJS 微服务的游戏社区与任务市场系统:架构设计
一、开发背景及目的
随着区块链技术的蓬勃发展以及去中心化概念的兴起,越来越多的开发者开始探索如何将区块链应用到实际业务场景中,特别是在游戏社区和任务市场的场景中。传统游戏社区和任务市场通常由中心化机构管理,容易产生管理不透明、交易不公正、数据安全难以保障等问题。因此,本项目基于以太坊智能合约和 NestJS 微服务架构,旨在打造一个去中心化的游戏社区与任务市场系统,利用区块链的透明性和智能合约的自动化执行,为玩家带来更公平、安全的交易体验,并通过 NestJS 微服务架构增强系统的可扩展性和灵活性。
二、架构设计
本系统架构设计包括前端模块、智能合约模块、区块链服务模块、NestJS 微服务模块、网关模块和缓存模块。下图为系统的总体架构:
1. 前端模块
前端主要使用 Web3.js 连接区块链和智能合约,并通过 RPC 接口与后端进行交互。为了支持任务和社区的多样化需求,前端提供了用户友好的任务发布、接受、交易历史查询等功能,并使用 RESTful 或 GraphQL 接口与后端网关通信,确保数据实时交互和操作的及时响应。
2. 智能合约模块
以太坊智能合约是系统去中心化功能的核心,包括以下几类合约:
- 账户管理服务:用于管理玩家的账户信息、资产存储与流转。
- 交易管理服务:处理玩家在任务市场中的交易,包括任务发布、接受、结算等逻辑,确保交易的安全性和不可篡改性。
- 社区积分服务:用于发放社区积分,鼓励玩家积极参与社区活动。
- 任务合约服务:允许用户发布任务和接受任务,并在完成任务后自动进行结算,为玩家提供奖励。
智能合约通过以太坊区块链存储数据,并通过 RPC 接口与区块链服务模块和前端模块通信,确保数据的透明性与一致性。
3. 区块链服务模块
区块链服务模块负责与以太坊区块链进行交互,主要使用 ethers.js。该模块作为智能合约模块与 NestJS 微服务之间的桥梁,确保智能合约的操作和微服务之间的数据交互顺畅
- 后端应用:管理充值服务等
- 对于用户:由于后端与合约交互需要用户上传账户私钥,基于安全性考量,仅对重要操作(如创建社区、创建社区积分)才在后端操作(后端不存储私钥),其余均在前端由用户自己确认合约交互。
4. NestJS 微服务模块
NestJS 微服务模块实现了系统的核心业务逻辑,模块划分清晰,保证了系统的可扩展性和灵活性。主要服务模块包括:
- 任务商城服务:管理所有游戏任务的发布和展示,并与智能合约交互以执行任务的创建、分配和结算。
- 社区管理服务:负责社区的用户管理、积分分发等操作,鼓励用户积极参与社区活动。
- 帖子服务:为玩家提供一个可以自由发布帖子、交流信息的平台,丰富社区互动体验。
- 邮件服务:用于发送通知邮件,如任务完成、社区活动通知等。
- 注册/登录/用户服务:用户注册和登录管理,负责验证用户身份,确保平台安全。
- 后台服务:提供管理员管理和监控任务、用户和社区活动的功能。
NestJS 微服务模块之间通过 gRPC 消息队列进行通信,实现高效、可靠的数据传输,保证了各服务模块间的解耦性。同时,每个微服务模块都可以独立部署和扩展,以满足系统未来的增长需求,后续可针对业务需求使用其他web框架实现微服务
5. 网关模块
网关模块是系统的入口点,使用NestJs实现,通过 RESTful 或 GraphQL API 将前端请求路由到相应的服务模块,起到负载均衡和安全访问控制的作用。同时,网关模块也处理前端和智能合约交互中的权限验证、数据格式转换等工作。
6. 缓存模块
系统采用 Redis 作为缓存数据库,主要用于存储频繁访问的数据和会话信息。Redis 不仅提高了数据的访问速度,还减少了对区块链和数据库的直接请求压力,从而提升了系统整体的响应效率。
三、架构设计优势
-
去中心化与透明性:通过以太坊智能合约实现任务市场和游戏社区的核心逻辑,确保交易的透明性,避免中心化机构的不透明操作。
-
高扩展性:NestJS 微服务架构设计,使每个模块可以独立部署和扩展。随着业务需求的增长,可以快速扩展相应的服务模块,确保系统高效运行。
-
可靠的通信机制:微服务间采用 gRPC 消息队列实现通信,既提升了通信效率,也保证了消息的可靠传输,适用于高并发场景。
-
缓存加速:使用 Redis 缓存频繁访问的数据和会话信息,不仅减轻了数据库的压力,还提升了系统响应速度,为用户提供更佳的体验。
四、总结
本项目在传统游戏社区的基础上,融合了区块链的去中心化特点和微服务架构的灵活性,旨在构建一个更透明、安全、高效的任务市场和游戏社区平台。未来,随着区块链技术的进一步发展,该架构可以适应更多的业务需求,为去中心化应用的落地提供有力支撑。
此架构设计不仅适用于任务市场,还可扩展到其他需要交易透明和安全保障的领域,为区块链应用提供了一个可参考的解决方案。
相关文章:

微服务架构设计的初次尝试——基于以太坊智能合约 + NestJS 微服务的游戏社区与任务市场系统:架构设计
TMDOG微服务架构设计的初次尝试——基于以太坊智能合约 NestJS 微服务的游戏社区与任务市场系统:架构设计 一、开发背景及目的 随着区块链技术的蓬勃发展以及去中心化概念的兴起,越来越多的开发者开始探索如何将区块链应用到实际业务场景中࿰…...

“北斗+实景三维”,助力全域社会治理
在国家治理体系和治理能力现代化的大背景下,全域社会治理成为提升国家治理效能的关键。“北斗实景三维”技术组合,为全域社会治理提供了新的技术支撑和解决方案。本文将探讨这一技术如何助力全域社会治理,以及其在实际应用中的潜力和挑战。 …...

#渗透测试#SRC漏洞挖掘# 信息收集-常见端口及谷歌语法
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...

如何使用java雪花算法在分布式环境中生成唯一ID?
引言 在现代分布式系统中,生成唯一标识符(ID)是一个常见的需求。传统的自增ID在分布式环境中会导致冲突,因此需要一种能够在分布式系统中生成全局唯一ID的算法。 雪花算法(Snowflake)就是为了解决这个问题而提出的一种高效的ID生成算法。本文将详细介绍雪花算法的原理、…...

【php常用公共函数】php获取指定时间段相差几小时,几分钟,几秒
实现代码 <?php function diffTime($datetime1, $datetime2) {// 确保 $datetime1 总是小于或等于 $datetime2if (strtotime($datetime1) > strtotime($datetime2)) {$tmp $datetime2;$datetime2 $datetime1;$datetime1 $tmp;}// 转换为时间戳$timestamp1 strtotim…...

图文深入介绍Oracle DB link(一)
1. 引言: 本文图文深入介绍Oracle DB link,先介绍基本概念。 2.DB link的定义 数据库链接(Database Link,简称 DB Link)是 Oracle 数据库中的一个重要功能。它是一种在一个 Oracle 数据库实例中访问另一个 Oracle 数…...

Uniswap/v2-core使用及其交易流程
Uniswap是一个开源的去中心化的交易所,在github上面有以下重要仓库: uniswap-v2-core: 币对池pair的核心智能合约。这个repository包含了Uniswap的币对池pair的所有核心逻辑,增加流动性、减少流动性等。uniswap-v2-periphery&…...

clickhouse运维篇(二):多机器手动部署ck集群
熟悉流程并且有真正部署需求可以看一下我的另一篇简化部署的文章,因为多节点配置还是比较麻烦的先要jdk、zookeeper,再ck,还有各种配置文件登录不同机器上手动改配置文件还挺容易出错的。 clickhouse运维篇(三)&#x…...

OpenCV视觉分析之目标跟踪(7)目标跟踪器类TrackerVit的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 VIT 跟踪器由于特殊的模型结构而变得更快且极其轻量级,模型文件大约为 767KB。模型下载链接:https://github.com/opencv/…...

Java 实现 RESTful 风格的 Web 服务详解
前言 RESTful(Representational State Transfer)风格的 API 已经成为现代 Web 服务的标准。它通过简单的 HTTP 方法和资源定位来提供了一种高度可扩展和易于维护的服务接口。Java 作为一种功能强大且广泛使用的编程语言,提供了多种框架来实现…...

18.网工入门篇--------今天介绍下广域网技术
广域网(Wide Area Network,WAN)是一种能连接多个城市、国家甚至横跨几个洲,提供远距离通信的网络。以下是关于广域网技术的详细介绍: 广域网的组成: 结点交换机:这是广域网的核心设备࿰…...

鸿蒙原生应用开发及部署:首选华为云,开启HarmonyOS NEXT App新纪元
目录 前言 HarmonyOS NEXT:下一代操作系统的愿景 1、核心特性和优势 2、如何推动应用生态的发展 3、对开发者和用户的影响 华为云服务在鸿蒙原生应用开发中的作用 1、华为云ECS C系列实例 (1)全维度性能升级 (2ÿ…...

Spring JdbcTemplate详解
文章目录 Spring JdbcTemplate详解一、引言二、配置JdbcTemplate1、引入依赖2、配置数据库连接池3、配置JdbcTemplate 三、使用JdbcTemplate操作数据库1、添加数据2、查询数据查询某个值根据条件查询返回某个对象查询对象集合 四、总结 Spring JdbcTemplate详解 一、引言 在J…...

Docker篇(Docker安装)
目录 一、Centos7.x 1. yum 包更新到最新 2. 安装需要的软件包 3. 设置 yum 源为阿里云 4. 安装docker 5. 安装后查看docker版本 6. 设置ustc镜像源 二、CentOS安装Docker 前言 1. 卸载(可选) 2. 安装docker 3. 启动docker 4. 配置镜像加速 …...

Pytorch 实现图片分类
CNN 网络适用于图片识别,卷积神经网络主要用于图片的处理识别。卷积神经网络,包括一下几部分,输入层、卷积层、池化层、全链接层和输出层。 使用 CIFAR-10 进行训练, CIFAR-10 中图片尺寸为 32 * 32。卷积层通过卷积核移动进行计…...

得物App获评新奖项,正品保障夯实供应链创新水平
近日,得物App再度获评新奖项——“2024上海市供应链创新与应用优秀案例”。 本次奖项为上海市供应链领域最高奖项,旨在评选出在供应链创新成效上处于领先地位、拥有成功模式和经验的企业。今年以来,得物App已接连获得“上海市质量金奖”、“科…...

【数据结构-邻项消除】力扣735. 小行星碰撞
给定一个整数数组 asteroids,表示在同一行的小行星。 对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。 找…...

002-Kotlin界面开发之Kotlin旋风之旅
Kotlin旋风之旅 Compose Desktop中哪些Kotlin知识是必须的? 在学习Compose Desktop中,以下Kotlin知识是必须的: 基础语法:包括变量声明、数据类型、条件语句、循环等。面向对象编程:类与对象、继承、接口、抽象类等。…...

VMware Workstation Pro for Personal Use (For Windows)
这是从broadcom.com网下载的个人版本的Vmware 17.6.1,存分享不要分。 VMware-workstation-full-17.6.1-24319023.exe(447.93 MB) Build Number: 24319023 Oct 08, 2024 07.33AM SHA2: f95429e395a583eb5ba91f09b040e2f8c53a5e7aa37c4c6bfcaf82115a8…...

论文 | PROMPTAGATOR : FEW-SHOT DENSE RETRIEVAL FROM 8 EXAMPLES
1. 背景信息 在信息检索领域,传统的方法往往依赖于大量的标注数据来训练模型,以便在各种任务中表现良好。然而,许多实际应用中的监督数据是有限的,尤其是在不同的检索任务中。最近的研究开始关注如何从一个拥有丰富监督数据的任务…...

使用 Github 进行项目管理
GitHub 是一个广泛使用的代码托管和协作平台,它提供了强大的工具来支持项目管理和团队协作。在项目开发和工作中,避免不了 Github 的使用,然鹅我一直没有稍微系统地学习过 github 的整个工作流程,对这些操作都是一知半解的&#x…...

企业SRC挖掘选择与信息收集指南
内容预览 ≧∀≦ゞ 企业SRC挖掘选择与信息收集指南导语1. 企业SRC的选择2. 信息收集2.1 集团与子公司2.2 小程序与APP2.3 Web端信息收集 3. 信息收集常用模板总结 企业SRC挖掘选择与信息收集指南 导语 近年来,企业的安全响应中心(SRC)已逐渐…...

Golang | Leetcode Golang题解之第524题通过删除字母匹配到字典里最长单词
题目: 题解: func findLongestWord(s string, dictionary []string) (ans string) {m : len(s)f : make([][26]int, m1)for i : range f[m] {f[m][i] m}for i : m - 1; i > 0; i-- {f[i] f[i1]f[i][s[i]-a] i}outer:for _, t : range dictionary …...

【DBeaver】连接带kerberos的hive[Apache|HDP]
目录 一、安装配置Kerberos客户端环境 1.1 安装Kerberos客户端 1.2 环境配置 二、基于Cloudera驱动创建连接 三、基于Hive原生驱动创建连接 一、安装配置Kerberos客户端环境 1.1 安装Kerberos客户端 在Kerberos官网下载,地址如下:https://web.mit.edu/kerberos…...

Unity3D 开发教程:从入门到精通
Unity3D 开发教程:从入门到精通 Unity3D 是一款强大的跨平台游戏引擎,广泛应用于游戏开发、虚拟现实、增强现实等领域。本文将详细介绍 Unity3D 的基本概念、开发流程以及一些高级技巧,帮助你从零基础到掌握 Unity3D 开发。 目录 Unity3D…...

文件操作和 IO(一):文件基础知识 文件系统操作 => File类
目录 1. 什么是文件 1.1 概念 1.2 硬盘, 内存, 寄存器之间的区别 1.3 机械硬盘和固态硬盘 2. 文件路径 2.1 绝对路径 2.2 相对路径 3. 文件分类 4. File 类 4.1 属性 4.2 构造方法 4.3 方法 1. 什么是文件 1.1 概念 狭义上的文件: 保存在硬盘上的文件广义的上的文…...

用Pyhon写一款简单的益智类小游戏——2048
文字版——代码及讲解 代码—— import random# 初始化游戏棋盘 def init_board():return [[0] * 4 for _ in range(4)]# 在棋盘上随机生成一个2或4 def add_new_tile(board):empty_cells [(i, j) for i in range(4) for j in range(4) if board[i][j] 0]if empty_cells:i,…...

akshare股票涨跌幅自定义范围查询:A股、港股、美股
参看:https://stock.hexun.com/2024-10-31/215251914.html 涨幅计算公式:(当前价格 - 上一个交易日收盘价) 上一个交易日收盘价 100% 。 跌幅计算公式:(上一个交易日收盘价 - 当前价格) 上一个…...

通过js控制修改css变量
在JavaScript中,你可以通过操作CSS变量(也称为自定义属性)来动态改变样式。CSS变量在CSS中使用 – 前缀定义,例如 --main-color: red;。在JavaScript中,你可以使用 document.documentElement.style.setProperty 方法来…...

<HarmonyOS第一课>HarmonyOS SDK开放能力简介的课后习题
不出户,知天下; 不窥牖,见天道。 其出弥远,其知弥少。 是以圣人不行而知,不见而明,不为而成。 本篇<HarmonyOS第一课>HarmonyOS SDK开放能力简介是简单介绍了HarmonyOS SDK,不需要大家过多…...