 大规模高性能区块链架构设计模式与测试框架-李世敬趣链科技 版权所有 ©2016-2021 6 区块链技术定义 区块链是由分布式数据存储、点对点传输、共识机制、加密算法等计算机技术构成的多中心 化系统 不可篡改(可信存证) ü 可对存储的文件、数据进行真实性校验 ü 可信追溯历史数据 去中心化共识(协作共享) ü 多方业务系统数据共享 ü 跨机构业务协作 核心特性 7 趣链科技 版权所有 ©2016-2021 7 趣链科技 版权所有 区块链价值定位 区块链作为新基建基础设施之一,是大数据、人工智能、云计算、物联网等其他新型技术的黏合剂,各项技 术相互促进,融合发展,共同开创更大价值空间,加快新兴技术商业落地 利用区块链的去中心化、数据 不能篡改的特性,解决制约云 计算发展的“可信、可靠、可 控”的问题。 融入大数据采集和共享中,作 为数据源接入大数据分析平台。 强化分布式数据存 储和边缘计算能力, 拓展物联安全边界 ©2016-2021 10 区块链组织形态 全球范围可以访问,不依赖于单 个公司或辖区,匿名性强,任何 参与者都可在其中写入、读取、 参与交易验证。 仅在机构内使用,读写权,记账 权由组织内自由定制。中心控制 者制定可参与和进行交易验证成 员范围。 联盟链仅限于联盟成员参与,系 统内交易确认节点为事先设定, 并通过共识机制确认。 『非许可链』公有链 私有链『许可链』 联盟链『许可链』0 码力 | 39 页 | 56.58 MB | 1 年前3 大规模高性能区块链架构设计模式与测试框架-李世敬趣链科技 版权所有 ©2016-2021 6 区块链技术定义 区块链是由分布式数据存储、点对点传输、共识机制、加密算法等计算机技术构成的多中心 化系统 不可篡改(可信存证) ü 可对存储的文件、数据进行真实性校验 ü 可信追溯历史数据 去中心化共识(协作共享) ü 多方业务系统数据共享 ü 跨机构业务协作 核心特性 7 趣链科技 版权所有 ©2016-2021 7 趣链科技 版权所有 区块链价值定位 区块链作为新基建基础设施之一,是大数据、人工智能、云计算、物联网等其他新型技术的黏合剂,各项技 术相互促进,融合发展,共同开创更大价值空间,加快新兴技术商业落地 利用区块链的去中心化、数据 不能篡改的特性,解决制约云 计算发展的“可信、可靠、可 控”的问题。 融入大数据采集和共享中,作 为数据源接入大数据分析平台。 强化分布式数据存 储和边缘计算能力, 拓展物联安全边界 ©2016-2021 10 区块链组织形态 全球范围可以访问,不依赖于单 个公司或辖区,匿名性强,任何 参与者都可在其中写入、读取、 参与交易验证。 仅在机构内使用,读写权,记账 权由组织内自由定制。中心控制 者制定可参与和进行交易验证成 员范围。 联盟链仅限于联盟成员参与,系 统内交易确认节点为事先设定, 并通过共识机制确认。 『非许可链』公有链 私有链『许可链』 联盟链『许可链』0 码力 | 39 页 | 56.58 MB | 1 年前3
 1.6 resource scheduling & container technology for financial service_yujun来了  n “开源架构”来了  n “分布式架构”来了  n “虚拟化”和“云计算”来了  n “大数据”来了  n “互联网金融”和“金融互联网”来了  n “移动业务”来了  n “敏捷”和“Devops”来了  n “去IOE”来了  n “自主可控”来了   Gopher  China  ③ 最小完成时间算法MCT(Minimum  Completion  Time)是以任意的顺序将任务映射到具有最早完成时间的主机上, 它并不保证任务被指派到执行它最快的主机上,而仅关心如何最小化任务完成时间,因而可能导致任务在资源上的 运行时间过长,从而潜在地增加了调度跨度。  ④ Min-Min算法,利用MCT矩阵,首先分别找到能够最短完成该任务的机器及最短完成时间,然后在所有的最短完成 围绕各种对资源有不同分配使用要求的应用开展调度工作  n 针对不同生产区域(devops/test,  staging,  production)  实现权重调整的调度方式  n 实现局部调度的个性化和全局调度的公平性  n 杜绝简单粗暴的调度,对关键业务应用的运行影响降低到最小  ① 基于不同应用的场景数据做资源的实时计算。  ② 场景数据的短期切片和中长期切片可以适应资源池投产0 码力 | 21 页 | 27.20 MB | 1 年前3 1.6 resource scheduling & container technology for financial service_yujun来了  n “开源架构”来了  n “分布式架构”来了  n “虚拟化”和“云计算”来了  n “大数据”来了  n “互联网金融”和“金融互联网”来了  n “移动业务”来了  n “敏捷”和“Devops”来了  n “去IOE”来了  n “自主可控”来了   Gopher  China  ③ 最小完成时间算法MCT(Minimum  Completion  Time)是以任意的顺序将任务映射到具有最早完成时间的主机上, 它并不保证任务被指派到执行它最快的主机上,而仅关心如何最小化任务完成时间,因而可能导致任务在资源上的 运行时间过长,从而潜在地增加了调度跨度。  ④ Min-Min算法,利用MCT矩阵,首先分别找到能够最短完成该任务的机器及最短完成时间,然后在所有的最短完成 围绕各种对资源有不同分配使用要求的应用开展调度工作  n 针对不同生产区域(devops/test,  staging,  production)  实现权重调整的调度方式  n 实现局部调度的个性化和全局调度的公平性  n 杜绝简单粗暴的调度,对关键业务应用的运行影响降低到最小  ① 基于不同应用的场景数据做资源的实时计算。  ② 场景数据的短期切片和中长期切片可以适应资源池投产0 码力 | 21 页 | 27.20 MB | 1 年前3
 3.云原生边云协同AI框架实践01 Sedna:边云协同AI框架 02 Sedna-GM:K8S Operator 03 实践案例 04 Edge AI现状与趋势 第一部分 Why Edge AI? • Cloud中心化的AI计算范式不足以应对端上AI 应用对实时性、准确性和强交互性的需求 Edge: geographically distributed Cloud: Centralized Client 数据在边缘产生 边侧逐步具备AI能力 分布式协同AI 核心驱动力 分布式协同AI核心驱动力 • 随着边侧算力逐步强化,边缘AI持续演变至分布式协同AI 分布式协同AI技术挑战 1. 边缘资源碎片化 2. 边缘数据孤岛 3. 边缘样本少 4. 边缘数据异构 分布式协同AI 技术挑战 边云协同AI框架 第二部分 首个分布式协同AI开源项目Sedna 基于KubeEdge提供的边云协 com/kubeedge/sedna 开源分布式协同AI框架KubeEdge-Sedna 1. GlobalCoordinator ⚫ 统一边云协同AI任务管理 ⚫ 跨边云协同管理与协同 ⚫ 中心配置管理 2. LocalController ⚫ 特性本地流程控制 ⚫ 本地通用管理: 模型, 数据集等 3. Worker ⚫ 执行训练或推理任务, 训练/推理程序, 基于现有AI框0 码力 | 37 页 | 2.36 MB | 1 年前3 3.云原生边云协同AI框架实践01 Sedna:边云协同AI框架 02 Sedna-GM:K8S Operator 03 实践案例 04 Edge AI现状与趋势 第一部分 Why Edge AI? • Cloud中心化的AI计算范式不足以应对端上AI 应用对实时性、准确性和强交互性的需求 Edge: geographically distributed Cloud: Centralized Client 数据在边缘产生 边侧逐步具备AI能力 分布式协同AI 核心驱动力 分布式协同AI核心驱动力 • 随着边侧算力逐步强化,边缘AI持续演变至分布式协同AI 分布式协同AI技术挑战 1. 边缘资源碎片化 2. 边缘数据孤岛 3. 边缘样本少 4. 边缘数据异构 分布式协同AI 技术挑战 边云协同AI框架 第二部分 首个分布式协同AI开源项目Sedna 基于KubeEdge提供的边云协 com/kubeedge/sedna 开源分布式协同AI框架KubeEdge-Sedna 1. GlobalCoordinator ⚫ 统一边云协同AI任务管理 ⚫ 跨边云协同管理与协同 ⚫ 中心配置管理 2. LocalController ⚫ 特性本地流程控制 ⚫ 本地通用管理: 模型, 数据集等 3. Worker ⚫ 执行训练或推理任务, 训练/推理程序, 基于现有AI框0 码力 | 37 页 | 2.36 MB | 1 年前3
 用Go语言实现推送服务器异步场景,直接往指定channel发送数据 – 同步场景,往channel发送的数据中,包含一 个获取返回值的channel 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 逻辑架构 去中心化设计 • 客户端随机连接 • Redis集中存储地址表 • 信息发送2跳到达 消息缓存设计 • 消息预存(Redis) • 尝试发送 • 发送成功后删除 客户端注册时序图 议程 • 推送服务器介绍0 码力 | 25 页 | 260.04 KB | 1 年前3 用Go语言实现推送服务器异步场景,直接往指定channel发送数据 – 同步场景,往channel发送的数据中,包含一 个获取返回值的channel 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 逻辑架构 去中心化设计 • 客户端随机连接 • Redis集中存储地址表 • 信息发送2跳到达 消息缓存设计 • 消息预存(Redis) • 尝试发送 • 发送成功后删除 客户端注册时序图 议程 • 推送服务器介绍0 码力 | 25 页 | 260.04 KB | 1 年前3
 Go 构建大型开源分布式数据库技术内幕3) Remove Replica from Node A Node C Node D Node E Scale-out (balance) 事务 ● Percolator ● 去中心化的两阶段提交 ○ Timestamp Allocator ● 优化的事务流程 ● Repeatable Read,RU TiDB SQL 层架构 例子 CREATE TABLE t (c10 码力 | 44 页 | 649.68 KB | 1 年前3 Go 构建大型开源分布式数据库技术内幕3) Remove Replica from Node A Node C Node D Node E Scale-out (balance) 事务 ● Percolator ● 去中心化的两阶段提交 ○ Timestamp Allocator ● 优化的事务流程 ● Repeatable Read,RU TiDB SQL 层架构 例子 CREATE TABLE t (c10 码力 | 44 页 | 649.68 KB | 1 年前3
 Go Web编程1 预防CSRF攻击 9.2 确保输入过滤 9.3 避免XSS攻击 9.4 避免SQL注入 9.5 存储密码 9.6 加密和解密数据 9.7 小结 10.国际化和本地化 10.1 设置默认地区 10.2 本地化资源 10.3 国际化站点 4 10.4 小结 11.错误处理,调试和测试 11.1 错误处理 11.2 使用GDB调试 11.3 Go怎么写测试用例 11.4 小结 12 一个go fmt命令 它可以帮你格式化你写好的代 码文件,使你写代码的时候不需要关心格式,你只需要在写完之后执行go fmt <文件名>.go,你的代码就被修改成 了标准格式,但是我平常很少用到这个命令,因为开发工具里面一般都带了保存时候自动格式化功能,这个功能其实 在底层就是调用了go fmt。接下来的一节我将讲述两个工具,这两个工具都自带了保存文件时自动化go fmt功能。 使用go fm fmt命令,更多时候是用gofmt,而且需要参数-w,否则格式化结果不会写入文件。gofmt -w src,可以格式 化整个项目。 go get go get 这个命令是用来动态获取远程代码包的,目前支持的有BitBucket、GitHub、Google Code和Launchpad。这个命令在 内部实际上分成了两步操作:第一步是下载源码包,第二步是执行go install。下载源码包的go工具会自动根据不0 码力 | 295 页 | 5.91 MB | 1 年前3 Go Web编程1 预防CSRF攻击 9.2 确保输入过滤 9.3 避免XSS攻击 9.4 避免SQL注入 9.5 存储密码 9.6 加密和解密数据 9.7 小结 10.国际化和本地化 10.1 设置默认地区 10.2 本地化资源 10.3 国际化站点 4 10.4 小结 11.错误处理,调试和测试 11.1 错误处理 11.2 使用GDB调试 11.3 Go怎么写测试用例 11.4 小结 12 一个go fmt命令 它可以帮你格式化你写好的代 码文件,使你写代码的时候不需要关心格式,你只需要在写完之后执行go fmt <文件名>.go,你的代码就被修改成 了标准格式,但是我平常很少用到这个命令,因为开发工具里面一般都带了保存时候自动格式化功能,这个功能其实 在底层就是调用了go fmt。接下来的一节我将讲述两个工具,这两个工具都自带了保存文件时自动化go fmt功能。 使用go fm fmt命令,更多时候是用gofmt,而且需要参数-w,否则格式化结果不会写入文件。gofmt -w src,可以格式 化整个项目。 go get go get 这个命令是用来动态获取远程代码包的,目前支持的有BitBucket、GitHub、Google Code和Launchpad。这个命令在 内部实际上分成了两步操作:第一步是下载源码包,第二步是执行go install。下载源码包的go工具会自动根据不0 码力 | 295 页 | 5.91 MB | 1 年前3
 可视化学习 Go 并发编程org/2012/waza.slide) 1. 并发很强大 2. 并发帮助实现并行,使并行(扩展等)变得容易 3. 并发不是并行,并发重点是架构,并行重点是执行,两者不同,但相关。 04:22 / 31:21 可视化 并发(Concurrency) & 并行(Parallelism) 一图胜千言! 并行(PARALLELISM) 这是并行 (/2017/go-concurrency-visualize/parallelism Println("neither channel was ready") } Go 让并发编程变的简单起来 但是问题来了 我们怎样去讲解 Go 的并发? 我们怎样思考 Go 的并发过程? 最终,我们怎样更好的实践 Go 并发编程? 祭出法宝 - GoTrace 一种将 Go 并发过程可视化的开源 (https://github.com/divan/gotrace) 工具 出自 divan (https://github go func() { // 发送 42 给 channel ch <- 42 }() // 从 channel 读取 <-ch } Go并发可视化 (/2017/go-concurrency-visualize/helloworld.html) 2. 计时器 func tick(d time.Duration) <-chan int {0 码力 | 29 页 | 1.48 MB | 1 年前3 可视化学习 Go 并发编程org/2012/waza.slide) 1. 并发很强大 2. 并发帮助实现并行,使并行(扩展等)变得容易 3. 并发不是并行,并发重点是架构,并行重点是执行,两者不同,但相关。 04:22 / 31:21 可视化 并发(Concurrency) & 并行(Parallelism) 一图胜千言! 并行(PARALLELISM) 这是并行 (/2017/go-concurrency-visualize/parallelism Println("neither channel was ready") } Go 让并发编程变的简单起来 但是问题来了 我们怎样去讲解 Go 的并发? 我们怎样思考 Go 的并发过程? 最终,我们怎样更好的实践 Go 并发编程? 祭出法宝 - GoTrace 一种将 Go 并发过程可视化的开源 (https://github.com/divan/gotrace) 工具 出自 divan (https://github go func() { // 发送 42 给 channel ch <- 42 }() // 从 channel 读取 <-ch } Go并发可视化 (/2017/go-concurrency-visualize/helloworld.html) 2. 计时器 func tick(d time.Duration) <-chan int {0 码力 | 29 页 | 1.48 MB | 1 年前3
 Go基础语法宝典数据类型的定义 定义变量 Go语言里面定义变量有多种方式。 使用 var 关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放在变量名后面: 定义多个变量 定义变量并初始化值 同时初始化多个变量 是不是觉得上面这样的定义有点繁琐?有一种写法可以让它变得简单一点。可以直接忽略类型声明,那 么上面的代码变成这样了: 觉得上面的还是有些繁琐,继续简化: 现在是不是看上去非常简洁了? me”,类型为"type"的变量 var variableName type //定义三个类型都是“type”的变量 var vname1, vname2, vname3 type //初始化“variableName”的变量为“value”值,类型是“type” var variableName type = value /* 定义三个类型都是"type"的变量,并且分别初始化为相应的值 vname1为v1,vname2为v2,vname3为v3 然后Go会根据其相应值的类型来初始化它们 */ var vname1, vname2, vname3 = v1, v2, v3 /* 定义三个变量,它们分别初始化为相应的值 vname1为v1,vname2为v2,vname3为v3 编译器会根据初始化的值自动推导出相应的类型 */ vname1, vname2, vname30 码力 | 47 页 | 1020.34 KB | 1 年前3 Go基础语法宝典数据类型的定义 定义变量 Go语言里面定义变量有多种方式。 使用 var 关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放在变量名后面: 定义多个变量 定义变量并初始化值 同时初始化多个变量 是不是觉得上面这样的定义有点繁琐?有一种写法可以让它变得简单一点。可以直接忽略类型声明,那 么上面的代码变成这样了: 觉得上面的还是有些繁琐,继续简化: 现在是不是看上去非常简洁了? me”,类型为"type"的变量 var variableName type //定义三个类型都是“type”的变量 var vname1, vname2, vname3 type //初始化“variableName”的变量为“value”值,类型是“type” var variableName type = value /* 定义三个类型都是"type"的变量,并且分别初始化为相应的值 vname1为v1,vname2为v2,vname3为v3 然后Go会根据其相应值的类型来初始化它们 */ var vname1, vname2, vname3 = v1, v2, v3 /* 定义三个变量,它们分别初始化为相应的值 vname1为v1,vname2为v2,vname3为v3 编译器会根据初始化的值自动推导出相应的类型 */ vname1, vname2, vname30 码力 | 47 页 | 1020.34 KB | 1 年前3
 Go 入门指南(The way to Go)里包含了当前最全面的学习 资源。本书通过对官方的在线文档、名人博客、书籍、相关文章以及演讲的资料收集和整理,并结合我自 身在软件工程、编程语言和数据库开发的授课经验,将这些零碎的知识点组织成系统化的概念和技术分类 来进行讲解。 随着软件规模的不断扩大,诸多的学者和谷歌的开发者们在公司内部的软件开发过程中开始经历大量的挫 折,在诸多问题上都不能给出令人满意的解决方案,尤其是在使用 C++ 来开发大型的服务端软件时,情 的宗旨,就是将一切没有必要的东西都去掉,不能去掉的就无底线 地简化,同时追求最大程度的自动化。他完美地诠释了敏捷编程的 KISS 秘诀:短小精悍! Go 语言通过改善或去除在 C、C++ 或 Java 中的一些所谓“开放”特性来让开发者们的工作更加便利。 这里只举例其中的几个,比如对于变量的默认初始化,内存分配与自动回收,以及更简洁却不失健壮的控 制结构。同时我们也会发现 Go 语言旨在减少不必要的编码工作,这使得 开发者贡献了新的核心代码。这俨然形成了世界上最大的开源 团队,并使该项目跻身 Ohloh 前 2% 的行列。大约在 2011 年 4 月 10 日,谷歌开始抽调员工进入全职 开发 Go 语言项目。开源化的语言显然能够让更多的开发者参与其中并加速它的发展速度。Andrew Gerrand 在 2010 年加入到开发团队中成为共同开发者与支持者。 在 Go 语言在 2010 年 1 月 8 日被 T0 码力 | 380 页 | 2.97 MB | 1 年前3 Go 入门指南(The way to Go)里包含了当前最全面的学习 资源。本书通过对官方的在线文档、名人博客、书籍、相关文章以及演讲的资料收集和整理,并结合我自 身在软件工程、编程语言和数据库开发的授课经验,将这些零碎的知识点组织成系统化的概念和技术分类 来进行讲解。 随着软件规模的不断扩大,诸多的学者和谷歌的开发者们在公司内部的软件开发过程中开始经历大量的挫 折,在诸多问题上都不能给出令人满意的解决方案,尤其是在使用 C++ 来开发大型的服务端软件时,情 的宗旨,就是将一切没有必要的东西都去掉,不能去掉的就无底线 地简化,同时追求最大程度的自动化。他完美地诠释了敏捷编程的 KISS 秘诀:短小精悍! Go 语言通过改善或去除在 C、C++ 或 Java 中的一些所谓“开放”特性来让开发者们的工作更加便利。 这里只举例其中的几个,比如对于变量的默认初始化,内存分配与自动回收,以及更简洁却不失健壮的控 制结构。同时我们也会发现 Go 语言旨在减少不必要的编码工作,这使得 开发者贡献了新的核心代码。这俨然形成了世界上最大的开源 团队,并使该项目跻身 Ohloh 前 2% 的行列。大约在 2011 年 4 月 10 日,谷歌开始抽调员工进入全职 开发 Go 语言项目。开源化的语言显然能够让更多的开发者参与其中并加速它的发展速度。Andrew Gerrand 在 2010 年加入到开发团队中成为共同开发者与支持者。 在 Go 语言在 2010 年 1 月 8 日被 T0 码力 | 380 页 | 2.97 MB | 1 年前3
 Go 入门指南(The way to Go)2.8 Go 解释器 第3章:编辑器、集成开发环境与其它工具 3.1 Go 开发环境的基本要求 3.2 编辑器和集成开发环境 3.3 调试器 3.4 构建并运行 Go 程序 3.5 格式化代码 3.6 生成代码文档 3.7 其它工具 3.8 Go 性能说明 3.9 与其它语言进行交互 第4章:基本结构和基本数据类型 4.1 文件名、关键字与标识符 4.2 Go 程序的基本结构和要素 11 计算函数执行时间 6.12 通过内存缓存来提升性能 第7章:数组与切片 7.1 声明和初始化 7.2 切片 7.3 For-range 结构 7.4 切片重组(reslice) 7.5 切片的复制与追加 7.6 字符串、数组和切片的应用 第8章:Map 8.1 声明、初始化和 make 8.2 测试键值对是否存在及删除元素 8.3 for-range 的配套用法 8.4 10.2 使用工厂方法创建结构体实例 10.3 使用自定义包中的结构体 10.4 带标签的结构体 10.5 匿名字段和内嵌结构体 10.6 方法 10.7 类型的 String() 方法和格式化描述符 10.8 垃圾回收和 SetFinalizer 第11章:接口(interface)与反射(reflection) 11.1 接口是什么 11.2 接口嵌套接口 11.3 类型断言:如何检测和转换接口变量的类型0 码力 | 466 页 | 4.44 MB | 1 年前3 Go 入门指南(The way to Go)2.8 Go 解释器 第3章:编辑器、集成开发环境与其它工具 3.1 Go 开发环境的基本要求 3.2 编辑器和集成开发环境 3.3 调试器 3.4 构建并运行 Go 程序 3.5 格式化代码 3.6 生成代码文档 3.7 其它工具 3.8 Go 性能说明 3.9 与其它语言进行交互 第4章:基本结构和基本数据类型 4.1 文件名、关键字与标识符 4.2 Go 程序的基本结构和要素 11 计算函数执行时间 6.12 通过内存缓存来提升性能 第7章:数组与切片 7.1 声明和初始化 7.2 切片 7.3 For-range 结构 7.4 切片重组(reslice) 7.5 切片的复制与追加 7.6 字符串、数组和切片的应用 第8章:Map 8.1 声明、初始化和 make 8.2 测试键值对是否存在及删除元素 8.3 for-range 的配套用法 8.4 10.2 使用工厂方法创建结构体实例 10.3 使用自定义包中的结构体 10.4 带标签的结构体 10.5 匿名字段和内嵌结构体 10.6 方法 10.7 类型的 String() 方法和格式化描述符 10.8 垃圾回收和 SetFinalizer 第11章:接口(interface)与反射(reflection) 11.1 接口是什么 11.2 接口嵌套接口 11.3 类型断言:如何检测和转换接口变量的类型0 码力 | 466 页 | 4.44 MB | 1 年前3
共 71 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8














 
 