精华内容
下载资源
问答
  • 2.3.2通讯方式 该开发板主要包括以太网接口,232串口通讯(带DB9母接口),USB转串口通讯,带Mini USB接口。USB主设备读取U盘文件,USB从设备,模拟U盘,CAN通讯、485通讯,皆带接线端子。 红外通讯:红外接收头...

    摘要:本文主要介绍物联网中目前较为常用的几款开发板,简单介绍一下各自的特点,希望对你有所帮助。

    1 引言

    众所周知开发板是物联网架构中的感知层智能设备,这类设备通常有芯片、通信模组、以及操作系统组成。当然不同的开发版在功能以及使用上可能存在着一定的差别,下面为大家介绍几款常用的物联网开发板。

    2 常用开发板

    2.1 Arduino开发板

    2.1.1 简介

    Arduino开发板本着让用户简单使用而且开源的设计理念,具有灵活便捷、入手门槛低、同时具有丰富接口、多功能、易扩展等优点,因此在电子设计领域应用较广。目前市场上Arduino开发板的种类非常多,如Arduino UNO/UNO R3,Arduino101/Intel Curie,Arduino Micro,Arduino Ethernet,Intel Galileo 开发板等。该类开发板上手极快,操作简单,价格相对要便宜一点。

    2.1.2独特优势

    (1)开放性,Arduino是起步较早的开源硬件项目,它的硬件电路和软件开发环境是完全公开的。

    (2)易用性:简单易用,无需安装额外驱动,采用类C语言,主函数中只涉及setup和loop连个模块。

    (3)易交流:Arduino已经划定了一个比较统一的框架,一些底层的初始化采用了统一的方法,对数字信号和模拟信号使用的端口也做了自己的标定,初学者在交流电路或程序时非常方便。

    2.1.3 开发板性能分析

    对于上述几款开发板的性能进行了简单的对比,Arduino UNO,该类开发板最为普通,功能较少,如无法实现插入SD卡进行扩展等,但时价格最便宜,仅需十几元;Arduino101/Intel Curie该开发板比较容易出现复位问题,价格较高,但是运算性能强大,对于Arduino Micro开发板,其底层编写容易出问题,但是尺寸最小,可做模拟键鼠;Arduino Ethernet 专注以太网,接口加网线长距离稳定,加tf卡可以储存更多资源。初始化速度比较慢,影响开发速度。Intel Galileo Gen 2代是一款功能比较强大的软件,下面对其简要介绍,Intel Galileo Gen 2代开发板兼容Arduino,具有一个32位处理器,可以将信息保存到SD卡进行记录,实现扩容,可与互联网收集的数据实现通信,具有USB主机连接器,可以使用网络摄像头,同时具有以太网接口,可以实现网线连接搭建局域网,同时具有低功耗的特点。工作电压为7-15V。具有14个数据引脚0-13(其中3、5、6、9、10、11可用于PWM输出),5个模拟引脚包括A0-A5,同时还具有其他接口。

    1585556530550838.png

    2.2 小熊派开发板

    与传统传感器不同的是,小熊派开发板没有板载传感器设计,为了满足不同的开发需求,该开发板采用可更换传感器扩展板设计,芯片指的是设备的主控芯片,该开发板搭载了一块低功耗的STM32L4单片机,通信模组 是数据传输的出入口,本开发板支持多种通信模组,采用可更换通信扩展板设计,包括WiFi,NBiot,2G ,4G等,liteos轻量级系统,支持串口,8MSPi flash,支持TF卡存储运行数据,240的分辨率lcd,显示传感器数据以及调试日志,AT-PC切换开关,电脑通过串口助手进行调试通信模组,右侧MCU模式,单片机MCU通过At指令与通信模组交互将传感器数据传输到云端。

    为了便于开发调试,如图所示,该开发板板载了2.1版本的ST-Link,它具有在线调试烧录,拖拽下载以及虚拟串口等功能。开发板左上角内置了一个TF卡卡槽,TF卡可以存储运行数据,其左侧有一个8M的SPI Flash,使用其方便对程序进行远程升级。开发板中间板载一块分辨率为240 * 240的LCD屏幕,其主要用于显示传感器数据以及调试日志。LCD屏幕下方是一个基于STM32L431的超低功耗单片机作为开发板的主控芯片。开发板右上角具有一个拨码开关,将其拨至左侧AT-PC模式,通过电脑端的串口助手,发送AT指令调试通信模组。右边AT-MCU模式,通过MCU发送AT指令与通信模组进行交互,将采集到的传感器数据通过通信模组发送到云端。同时小熊派IoT开发板在主板上引出21个IO口,具备IIC、SPI、USART、ADC、DAC等功能,可最大程度地满足开发者的自主开发需求。

    1585377427382863.png

    主要参数如下表:

    参数

    详情

    存储

    Flash:256K   SRAM:64KB

    SD卡

    系统支持32GB的SD卡存储扩展

    外扩Flash

    外扩8MB SPIFlash

    按键

    一个复位键,两个功能按键

    供电

    USB 5V或外部电源5V

    LED灯

    上电指示LED红色,下载指示LED橙色,一个用户定义LED,蓝色。

    2.3 STM32F429 野火开发板

    STM32F429野火挑战者开发板,共有两个版本,二者存在一定差异,挑战者开发板是主控芯片是Cortex-M4系列, STM32F429IGTx,具有 1MB Flash,192kB SRAM+64CCM RAM,系统时钟达到 180MHz。板载 SDRAM:64M. SPI FLASH: 16M。EEPROM : 256 B。SD 卡:Micro SD卡接口,最大支持 32G 容量。实物图如下所示。

    1585742275382725.png

    2.3.1 供电方式

    5V 供电: 2个 MicroUSB 接口。

    6-12V 供电:DC电源接口,可接 6-12V电源适配器。

    2.3.2通讯方式

    该开发板主要包括以太网接口,232串口通讯(带DB9母接口),USB转串口通讯,带Mini USB接口。USB主设备读取U盘文件,USB从设备,模拟U盘,CAN通讯、485通讯,皆带接线端子。 红外通讯:红外接收头接口。蓝牙串口。WIFI: EMW1062,可实现 wifi传输视频,板载天线。音频输出接口。

    2.3.3 其他硬件

    LCD:支持5寸屏,分辨率为800*480.

    LED灯:1个,1个RGB全彩灯。

    按键:3个实体按键,1个电容按键。

    程序下载接口:  JTAG接口、  SWD 接口:支持 DAP、JLink、ULink、STLink 下载器。

    传感器:温湿度传感

    点击这里,了解更多精彩内容

    展开全文
  • 本文分享自华为云社区《华为云PB级数据库GaussDB(for Redis)揭秘第五期:高斯 Redis 在IM场景中的应用》,原文作者:心机胖 。 一、背景 即时通讯(Instant Messaging,简称IM)是一个实时通信系统,允许两人或...
    摘要:揭秘高斯 Redis 在IM场景中的应用。

    本文分享自华为云社区《华为云PB级数据库GaussDB(for Redis)揭秘第五期:高斯 Redis 在IM场景中的应用》,原文作者:心机胖 。

    一、背景

    即时通讯(Instant Messaging,简称IM)是一个实时通信系统,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频。微信、QQ等IM类产品在这个高度信息化的互联网时代已成为生活必备品,IM系统中最核心的部分是消息系统,消息系统中最核心的功能是消息的同步、存储和检索。

    • 消息同步:将消息完整的、快速的从发送方发送至接收方。消息同步系统最重要的衡量指标是消息传递的实时性、完整性、顺序性以及支撑的消息规模。
    • 消息存储:即消息的持久化,传统消息系统通常支持消息在接收端的本地存储,数据基本不具备可靠性。现代消息系统支持消息在云端存储,从而实现消息异地查询:账号可在任意客户端登陆查看所有历史消息。
    • 消息检索:消息一般是文本,所以支持全文检索也是必备的能力之一。传统消息系统通常来说基于本地存储的消息数据来构建索引,支持消息的本地检索。而现代消息系统支持消息的在线存储以及存储过程中构建索引,提供全面的消息检索功能。

    二、IM系统架构设计

    上图为IM系统的应用场景,可用于聊天,游戏、智能客服等诸多行业。不同行业对IM系统的成本、性能、可靠性、时延等指标的需求是不同的,架构设计需要进行平衡。接下来将介绍IM系统架构设计所涉及到的一些基本概念。

    2.1 传统架构 vs 现代架构

    • 传统架构

    Ø 先同步后存储。

    Ø 在线消息同步和离线消息缓存。

    Ø 服务端不会对消息进行持久化,无法支持消息异地查询。

    • 现代架构

    Ø 先存储后同步。

    Ø 划分消息存储库与消息同步库。消息存储库用于全量保存所有会话消息,主要用于支持消息异地查询。消息同步库,主要用于接收方的多端同步。

    Ø 提供消息全文检索能力。

    2.2 读扩散vs 写扩散

    《2020微信数据报告》指出,截至2020年9月,微信月活跃用户数为10.825亿,日消息发送次数450亿次,日音视频呼叫成功次数4.1亿次。面临这么多的消息,如何保证消息传递的可靠性、一致性并且有效的降低服务器或者客户端的压力是十分具有技术挑战的。其中,采用何种读写模型对IM系统至关重要,这里介绍两种模型:读扩散和写扩散。

    如上图所示,用户B与每个聊天的人(A1,A2,A3)都有一个信箱(一种数据结构的抽象,用于存储消息),B在查看聊天信息时需读取所有有新消息的信箱。IM系统里的读扩散通常是每两个相关联的人就有一个信箱。

    读扩散的优点:

    • 写操作(发消息)轻量,不管是单聊还是群聊,只需要往相应的信箱写一次即可。
    • 每一个信箱天然就是两个人的聊天记录,可以方便查看和搜索聊天记录。

    读扩散的缺点:

    • 读操作(读消息)很重,存在读放大效应。

    如上图,在写扩散中,用户(B1,B2,B3)都只从自己的信箱里读取消息,但写(发消息)的时候,对于单聊跟群聊处理如下:

    • 单聊:往自己的信箱跟对方的信箱都写一份消息;同时,如果需要查看两个人的聊天历史记录的话还需要再写一份。
    • 群聊:发信息时需要针对所有群成员的信箱都写一份消息。群聊使用的是写扩散模型,而写扩散很消耗资源,因此微信群有人数上限(目前是500)。

    写扩散优点:

    • 读操作很轻量,只需要读取自己的邮箱。
    • 可以很方便实现消息的多终端同步。

    写扩散缺点:

    • 写操作很重,尤其是对于群聊来说。

    2.3 推模式 vs 拉模式 vs 推拉结合模式

    在IM系统中,消息的获取通常有三种模式:

    • 推模式(Push):新消息到达时由服务器主动推送给所有客户端;需要客户端和服务器建立长连接,实时性很高,对客户端来说只需要接收处理消息即可;缺点是服务端不知道客户端处理消息的能力,可能会导致数据积压。
    • 拉模式(Pull):由前端主动发起拉取消息的请求,为了保证消息的实时性,一般采用推模式,拉模式一般用于获取历史消息;因客户端拉取新消息的时间间隔不好预设,太短

    可能会导致大量的连接拉取不到数据,太长导致数据接收不及时。

    • 推拉结合模式:兼顾push和pull两种模式的优点。新消息来临时服务器会先推送一个新消息到达的通知给前端,前端接收到通知后就向服务器拉取消息。

    三、IM技术挑战

    上图为IM系统的总体架构图,Client双方通信会经过Server转发来完成消息传递。其核心为消息存储库和消息同步库。这两种库对存储层的性能有极高的要求。

    • 支撑海量数据存储:对于消息存储库来说,如果需要消息永久存储,则随着时间的积累,数据规模会越来越大,需存储库支持容量无限扩展以应对日益增长的消息数据。
    • 低存储成本:消息数据具有明显的冷热特征,大部分查询集中在热数据,冷数据需要一个低成本的存储方式,否则随着时间的积累,数据量不断膨胀,存储成本会不断上升。
    • 数据生命周期管理:不管是对于消息数据的存储还是同步,数据都需要定义生命周期。存储库是用于在线存储消息数据本身,通常需要设定一个较长周期的保存时间。而同步库 是用于写扩散模式的在线或离线推送,通常设定一个较短的保存时间。
    • 极高的写入吞吐:绝大部分IM类场景,通常是采用写扩散模型,写扩散要求底层存储具备极高的写入吞吐能力,从而应对消息洪峰。
    • 低延迟的读:消息系统通常应用于在线场景,具备较高的实时性,读取延迟应尽可能低。

    四、高斯Redis在IM场景中的优势

    IM系统的核心是存储层,其性能差异将直接影响IM系统的用户体验。目前存储层可选择的数据库产品有很多,如HBase、开源Redis等等。选择何种数据库,需根据业务规模、成本、性能等指标来进行综合选择。这里介绍一种NoSQL数据库:高斯Redis,在性能和规模上,可以满足IM系统对存储层的严格要求:海量数据存储、低存储成本、生命周期管理、写入吞吐大、读取时延低。

    4.1高斯Redis简介

    高斯Redis是华为云数据库团队自主研发且兼容Redis5.0协议的云原生数据库,采用计算存储分离架构。存储侧使用自研的存储系统,容量无限扩展、强一致、高可靠。计算侧基于 LSM 存储引擎实现,通过将大量的随机写转换为顺序写,从而极大的提升了数据写入性能,同时也通过读缓存、bloom filter 等极大优化了读取性能。下图是高斯Redis在IM场景的优势介绍。

    4.2基于高斯Redis的IM应用案例:

    下图是基于高斯Redis的IM系统模型图,这里我们使用stream作为基本数据结构。Redis stream不仅可以作为消息存储容器,还实现了生产者、消费者等基本模型,具有IM系统的基本功能,如消息订阅,分发、增加消费者等,用户可基于高斯Redis快速构建一套IM系统。创建一个群聊时,在Redis中对应地为该群聊创建一个stream队列。在发送消息时,每个用户都将消息按照时间顺序添加到stream队列中,保证了消息的有序性。stream是一个持久化的队列,可保证信息不丢失。

    五、总结

    高斯Redis通过一系列技术创新实现了读写性能水平扩展,秒级扩容,低成本以及自动备份等功能, 可作为IM系统的存储层,其优异的读写性能和高级特性将会极大助力IM应用.同时,高斯Redis在开源Redis的基础之上,较好平衡了性能和成本,能够广泛应用在智慧医疗、流量削峰、计数器等领域。

    六、结束

    本文作者:华为云高斯Redis团队。

    杭州西安深圳简历投递:yuwenlong4@huawei.com

    更多技术文章,关注高斯Redis官方博客:https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813

    七、参考资料

    1. 《GaussDB(for Redis)官方主页》

    https://www.huaweicloud.com/product/gaussdbforredis.html

    2. 《华为云GaussDB(for Redis)与自建开源Redis的成本对比》

    https://www.modb.pro/db/42739

    3. 《华为云PB级数据库GaussDB(for Redis)揭秘第一期:Redis与存算分离》

    https://bbs.huaweicloud.com/blogs/238584

    4. 《华为云PB级数据库GaussDB(for Redis)揭秘第三期:一场由fork引发的超时,让我们重新探讨了Redis的抖动问题》

    https://bbs.huaweicloud.com/blogs/245651

    5. 《现代 IM 系统中的消息系统架构—架构篇》

    https://www.infoq.cn/article/ypb3y2lv-dsftrr5cguv

     

     

    点击关注,第一时间了解华为云新鲜技术~

    展开全文
  • 需求 最近因为项目中需要接入该功能,因为公司是使用华为云,所以特地找了华为云的内容审核服务。本来想着有sdk应该是三下五乘二的事情,结果看了文档 没错人家不和你玩.net,没办法只能是退而求其次,使用它的...

    背景

    内容审核(Content Moderation),是基于图像、文本、音视频的检测技术,可自动检测涉黄、涉政涉暴、涉政敏感人物、图文违规等内容,对用户上传的图片、文字、音视频进行内容审核,以满足上传要求,帮助客户降低业务违规风险。

    一般涉及到TO C的很多业务都会涉及到。

    内容审核-图像

    图像内容审核,利用深度神经网络模型对图片内容进行检测,准确识别图像中的涉政敏感人物、暴恐元素、涉黄内容等,帮助业务规避违规风险。

    内容审核-文本

    文本内容审核,采用人工智能文本检测技术有效识别涉黄、涉政、广告、辱骂、违禁品和灌水文本内容,提供定制化的文本敏感内容审核方案。

    需求

    最近因为项目中需要接入该功能,因为公司是使用华为云,所以特地找了华为云的内容审核服务。本来想着有sdk应该是三下五乘二的事情,结果看了文档

    没错人家不和你玩.net,没办法只能是退而求其次,使用它的http api。

    主要代码实现

    获取token

      /// <summary>
            /// 
            /// </summary>
            /// <param name="username"></param>
            /// <param name="password"></param>
            /// <param name="domainName"></param>
            /// <param name="projectName"></param>
            /// <returns></returns>
            private static String getToken(String username, String password, String domainName, String projectName)
      {
                var client = new RestClient("https://iam.myhuaweicloud.com/v3/auth/tokens");
                client.Timeout = -1;
                var request = new RestRequest(Method.POST);
                request.AddHeader("Content-Type", "application/json");
                var body = "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"name\":\"" + username + "\",\"password\":\"" + password + "\",\"domain\":{\"name\":\"" + domainName + "\"}}}},\"scope\":{\"project\":{\"name\":\"" + projectName + "\"}}}}";
                request.AddParameter("application/json", body, ParameterType.RequestBody);
                ServicePointManager.ServerCertificateValidationCallback = ((a1, b1, c1, d1) => { return true; });
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | (SecurityProtocolType)3072;
                IRestResponse response = client.Execute(request);
                if (response.StatusCode == HttpStatusCode.Created)
                {
                   return  response.Headers.FirstOrDefault(o => o.Name == "X-Subject-Token")?.Value.ToString()??null;
                }
                else
                {
                    Console.WriteLine("err:" + response.Content);
                }
                return null;
            }
    

    内容审核

      private static bool requestModerationTextContentBase64(String token, String textModeration, String projectName)
            {
                var client = new RestClient("https://moderation."+ projectName + ".myhuaweicloud.com/v1.0/moderation/text");
                client.Timeout = -1;
                var request = new RestRequest(Method.POST);
                request.AddHeader("X-Auth-Token", token);
                request.AddHeader("Content-Type", "application/json");
    
                ModerationTextContentBody model = new ModerationTextContentBody();
                List<string> list = new List<string>
                {
                    "ad",
                    "politics",
                    "abuse",
                    "porn",
                    "contraband",
                    "flood"
                };
                model.categories.AddRange(list);
                model.items.Add(new ItemsItem() { type= "content", text= textModeration });
    
                var body = JsonConvert.SerializeObject(model);
                    //"{\"categories\":[\"ad\",\"politics\",\"abuse\",\"porn\",\"contraband\",\"flood\"],\"items\":[{\"text\":\""+ textModeration + "\",\"type\":\"content\"}]}";
    
    
    
    
                request.AddParameter("application/json", body, ParameterType.RequestBody);
                IRestResponse response = client.Execute(request);
                Console.WriteLine(response.Content);
                if (response.StatusCode == HttpStatusCode.OK)
                {
                  var r=  JsonConvert.DeserializeObject<ResponseModerationTextContent>(response.Content);  
                  if(r.result.suggestion== "pass")
                    {
                        return true;
                    }
                }
                else
                {
                   Console.WriteLine("err:" + response.Content);
                }
                return false;
            }
    

    调用

       String token = getToken(username, password, domainName, projectName);
                //  Console.WriteLine(token);
                string textModeration = @"呜呜呜呜呜";
             
    
                  var result=  requestModerationTextContentBase64(token, textModeration, projectName);
    
    展开全文
  • 华为云区块链服务的整体架构 华为云区块链服务BCS是面向企业及开发者的高性能、高可用和高安全的区块链技术平台服务,可以帮助企业和开发人员在华为云上快速、低成本的创建、部署和管理区块链应用。 BCS基于Hyper...

    华为云区块链服务的整体架构

    华为云区块链服务BCS是面向企业及开发者的高性能、高可用和高安全的区块链技术平台服务,可以帮助企业和开发人员在华为云上快速、低成本的创建、部署和管理区块链应用。

    BCS基于Hyperledger1.0、kubernetes搭建,配置简单,数分钟内即可完成部署,提供全流程的自动化运维服务,多维度监控;支持多种高效共识算法,切换灵活,秒级共识(2000+ TPS);多角色节点和成员可动态加入/退出;采用容器化物理资源管理;一键上链,节约80%的开发、部署成本;按需付费,减少60% 使用成本;统一运维,节约监控和运维成本;根据用户需求进行弹性伸缩, 升级回滚;完善的用户、秘钥、权限管理和隔离处理,多层加密保障,国密和同态加密等隐私处理,可靠的网络安全基础能力,运营安全无忧。

    BCS的总体逻辑架构如图1所示的三个层次,即区块链服务平台、合约链码层和业务应用层。

    区块链服务平台

    区块链服务平台具有极强的可靠性和扩展性,后续根据市场需求逐步支持Corda 和EEA 等优秀区块链框架,为上层应用低成本、快速的提供高安全、高可靠、高性能的企业级区块链系统。

    合约链码

    合约链码层目前提供Hyperledger 标准智能合约接口,用户可以根据不同应用场景构建不同的智能合约,后续将与合作伙伴一起为用户打造通用场景智能合约库,如供应链管理和溯源、供应链金融、数字资产、公益慈善和互联网保险等,企业可以在此基础上快速构建区块链应用场景。

    业务应用层

    业务应用层为最终用户提供可信、安全、快捷的区块链应用。用户可以使用华为云提供的各种解决方案(例如供应链金融解决方案、游戏行业解决方案、供应链溯源解决方案、新能源行业解决方案等),结合合约层快速搭建区块链应用。

    b361c343a1bf4d0e98101448322e2dc5.jpeg

    图1 华为云区块链服务BCS的逻辑架构

    本文后续章节将带领你如何使用华为云区块链服务快速开发和部署链上应用,从区块链服务平台层、链码层、应用业务层阐述开发和使用的方法。

    部署区块链服务

    步骤1:资源准备

    为了更稳定的运行区块链服务需准备2台8u16g机器来进行服务的部署。注册并登陆华为云账号,进入华为云管理控制台, 选择计算/云容器引擎服务(见图2)。

    点击创建Kubernetes集群按钮,进入创建虚拟机的界面,在集群名称输入框中命名集群的名字,按需选择自己要使用的配置(可以采用默认配置)并点击下一步按钮进入图3界面。

    在图3的界面上选择2台8核16GB内存的机器,在弹性IP栏点击现在购买弹性IP,公网弹性IP主要用于对公网发布BCS代理的访问地址。在云容器引擎左侧导航条中点击资源管理/虚拟机集群如图4,查看集群列表中刚创建的集群状态是否购买成功。

    3c35a0411cce41bda3e66c4182df7584.jpeg

    图2 云容器引擎服务总览

    bb8248764b4d444c8a294e37cd1d5372.jpeg

    图3 选择节点机器规格

    5b6f9c752e9d43758bdec89413f19c16.jpeg

    图4 集群信息列表

    步骤2:部署服务

    在云管理控制台点击区块链服务进入如图5的区块链服务页面, 点击该页面右上角的“购买区块链服务”的按钮进入图6。

    8585e7425a8a4260b247002590692781.jpeg

    图5 区块链服务总览

    在图6的区块链服务购买页面中填写区块链服务名称,选择步骤1中创建的容器集群。在该示例中我们创建了两个节点组织testorg和developerorg,并为每个组织分配两个peer节点;选择快速拜占庭容错共识策略,基于拜占庭容错共识节点的最小数量为4,即3f+1,f=1;选择ECDSA签名算法的成员证书分发机制;配置链码管理Portal的登录密码。

    2cc054df2db147208ba068b3001ece2d.jpeg

    图6 购买区块链服务

    区块链节点的通道配置如图7所示, 我们创建一个通道命名为testchannel, 把之前创建的组织testorg和developerorg加入该通道。完成如上配置之后, 点击下一步浏览该服务的概要信息,最后提交订单完成服务的订购和配置过程如图8。

     

    图7 区块链节点的通道配置

    651c3918dd244e0996f9b34dfd897d80.jpeg

    图8 区块链服务订单详情

    点击左侧导航条的服务管理进入服务状态查询页面,等待数分钟后查看所部署的服务状态如图9所示, 该服务进入成功运行状态。

    698e808cd302451e8a5cd5f691b0d775.jpeg

    图9 区块链服务运行界面

    开发链码

    链码也称为智能合约,实质上是控制区块链网络中的不同实体或相关方相互交易的业务逻辑。简言之,链码将业务网络交易封装在代码中,可以调用链码来设置和获取账本,即区块数据或世界状态(world state)。

    步骤1:示例场景说明

    该示例场景使用区块链来追踪研发团队内的某产品的测试数据,通过查询某个产品或者服务一段时间内的测试用例结果, 进而分析产品的功能状态。开发人员可以查询到失败用例是哪些、集中在产品的哪些模块,还可以根据测试人员的名字,联系测试人员快速定位问题;测试管理者能根据不同测试人员的测试用例,发现问题的多少和模块的稳定程度;测试人员在系统中记录测试结果,其他参与方可以查询测试结果。该示例场景的基本功能说明如下。链码的交互流程如图10。

    1、 测试管理者manager创建项目和模块;

    2、 测试管理者manager根据项目名称、模块添加测试用例、创建人和创建时间;

    3、测试人员tester根据测试用例添加测试结果、测试时间、测试人员和备注;

    4、测试人员tester、测试管理者manager、开发人员developer可以根据项目名称、模块查询测试用例;根据测试用例查询测试结果、时间、测试人员和备注。

    6aed2f8d26a64b999259c2cc5232b355.png

    图10 线下APP和链码的简单交互流程图

    步骤2:编写链码

    链码开发人员可从

    "github.com/hyperledger/fabric/core/chaincode/shim" 模块查看链码的接口,需实现init和invoke接口。shim模块中的接口定义如下:

    d8e23d38590840088bfe9e2d6b6885fc.png

    在定义好整个代码的保存目录结构后,开发人员需将"github.com/hyperledger/fabric/core/chaincode/shim" 加入到方法引用。

    对于有需要初始化处理的数据,可以在初始化函数init中编写并在链码实例化的过程中进行。这里我们定义了一个示例即初始化项目名称,代码实现如下:

    6b02f66676c84ea4bd3ad2b08bce6d60.png

    接下来开始定义内部逻辑的启用函数invoke。首先通过接口中的内置方法GetFunctionAndParameters()来获取传入的函数别名和参数,通过switch case或if else条件语句把之前分析的各个用户角色可以调用的方法起个别名,然后和内部的真实方法做好一一对应关系,并将接口对象和相应调用参数传入对应的方法。

    具体的用户能够访问哪个方法的权限逻辑控制可由上层的应用app实现,链码主要完成对数据的存储和查询的逻辑。Invoke 链码示例如下:

    a6cd31feb46f4f629df574f4fa2d319d.png

    完成invoke函数后我们需要给这个go文件定义好它的入口main函数,通过fabric shim包中的Start方法来启动我们定义的全局智能合约,保证链码可以被正确的调用,示例如下:

    e67f814a43534518b969738777589904.png

    这样我们链码的基本代码架构就搭建好了,开发人员可继续填充每个方法内的逻辑,即别名所对应的真实方法的实现。我们以创建测试用例和查询测试用例为示例说明。

    ● 创建测试用例以项目名称、模块名称及测试用例名称构成复合主键,然后为它创建一个索引,再将创建好的索引存入链中。这样查询的时候就可以使用不同的组合查询方式查询真实需要的结果。

    cc8d2c20730a4a4b8f33479ea0ce583e.jpeg

    ● 查询测试用例通过部分匹配复合主键将具有相同的项目名称和模块名称的值查询出来,然后通过迭代器将键值中的测试用例名称截取出来存成一个列表,对其进行json序列化并作为查询结果返回给上层App。上层App需要对查询的数值进行反序列化即可拿到整个用例名称的列表,根据其他需要查询具体用例结果。

    eac6045d320847ee8e289d3e5bd32b0a.jpeg

    f654a52fefc14b00b5e42f125cbe802f.png

    步骤3:安装部署链码

    链码编写完成之后我们需要把链码部署到fabric集群环境中。华为云区块链服务提供了可视化的链码生命周期管理工具。在区块链服务的管理控制台上点击服务列表后面的链码管理链接,打开图11中的链码管理登陆页面,输入默认的用户名admin和用户创建服务时所设置的密码,登陆链码管理平台对链码进行相应的操作。

    36adef129c234b82b002c8431a7b13a9.jpeg

    图11 链码管理登陆界面

    登陆后用户可选择在哪个组织的哪个节点peer上安装链代码。如图12所示我们选择在testorg的peer-1节点安装链代码。点击右上角的安装链码按钮,需要填写链码名称、版本号以及为了保证完整性的信息摘要,最后上传一个图13所示的链码zip格式的压缩文件。

     

    图12 链码管理界面

    be66f4e061bc4356b89f1a6edb6ea75d.png

    图13 链码安装界面

    链码的zip压缩包和压缩包的摘要信息计算如图14和15所示。

    3b69dfeb82624705b7874e87cb96cd74.jpeg

    图14 链码压缩包

    dbd34dcdafd641faaae6961d902aaf73.png

    图15 链码压缩包摘要信息

    链码使用之前需要先实例化,安装成功以后我们在链码的操作按钮列中可以看到图16实例化按钮已经处于激活状态。点击实例化按钮,选择链码背书策略,输入链码的函数名、init方法的参数如上述示例中的项目名称testproject、选择要实例化的通道如testchannel,然后点击确定按钮,触发链码的实例化。实例化结束后可在如图17的界面上查询链码状态,在testchannel上可以查看链码是否已经实例化成功。

    72264c4b492845539aece02781f384d0.png

    图16 链码激活状态界面

    5797139a1ba3454c892da1d309b81ba7.png

    图17 链码实例化成功界面

    开发业务层区块链应用

    Hyperledger fabric目前支持java,nodejs,go和python语言的sdk,供用户选择用不同的语言开发上层应用,使用相应的sdk调用部署在区块链上的链码。以下示例中我们选择使用go语言开发业务层应用。

    步骤1:配置fabric sdk

    Hyperledger fabric官方提供了我们需要的go sdk文件包,下载地址是:

    https://github.com/hyperledger/fabric-sdk-go。目前BCS服务使用的版本commit号是035e4f9。

    我们需要为fabric sdk生成相应的配置文件和访问区块链节点的组织证书。SDK配置文件主要包括要访问的链码名称/版本、证书解压的目录位置、实例化链码的通道,安装链码的节点组织/名称。在订购的区块链服务状态中的点击图18中的“下载SDK配置“会弹出图19配置窗口,完成sdk配置。

    d3cfb094e83848cca6968da20486a2fe.png

    图18 SDK配置文件下载界面

    89f7c18f2981442da88342c31a321c15.png

    图19 配置SDK文件下载界面

    在订购的区块链服务状态列表页面上可以查看每个节点的状态以及相应的证书下载功能,我们需要下载相关的证书到sdk的配置文件所指定目录中,使得业务应用可以和区块链节点正常的进行通讯。图20显示了orderer节点和peer节点的证书下载链接。

    f26dd03dba8e4938ab716ebb6ff1d4d7.png

    图20 orderer节点和peer节点的证书下载

    步骤2:编写业务应用代码

    合理配置sdk与区块链节点peer的通信后,业务层应用代码仅需对接链码的invoke和query的方法。以下示例中我们使用sdk提供的接口ChannelClient,即先通过加载sdk配置文件生成一个sdk实例,然后传入通道名称和用户信息生成一个ChannelClient对象,最后使用该ChannelClient发起一笔执行链码的交易。

    b632a526e16d4288afd45ece77836bcb.jpeg

    图21 ChannelClient初始化过程

    在业务应用代码中定义好一个链码的数据结构ChainCodeSpec,包括ChannelClient对象、 用户信息和链码名称等,在ChannelClient初始化时给其赋值。将链码的invoke和query方法定义成结构体方法,可以很简单的在发起交易的时候完成数据传递如图22所示。

    bb560a1a3e404e61af7511bf5d9c03ee.jpeg

    图22 调用链码的invoke和query方法

    步骤3:测试业务应用代码

    下面我们简单的定义一个main方法如图23来测试一下我们的代码。首先声明之前在链码管理网站实例化的链码信息,即链码名称chaicodetest,实例化的通道名称testchannel,用户使用的是组织内的普通用户。其次,定义两个测试方法创建测试用例和查询测试用例。

    创建测试用例create_testcases需要按顺序传入4个参数即项目名称、模块名称、测试用例名称和测试用例描述,调用invoke方法将一次交易写入区块链。查询测试用例query_testcases方法传入项目名称和模块名称,查询测试用例信息。

    6f158581e1154754bf2f243dbbef69df.jpeg

    图23 业务应用调用链码实现端到端测试

    之后我们使用go run来执行这个测试用例,如图24我们可以看到已经生成testchannel实例并与区块链节点建立连接。为了确认交易是否正常,链码是否正确保存之前用例的复合键值索引,我们登陆区块链节点并用“docker logs <容器id>”命令我们可以看到如图25中为每笔交易创建的区块。图26链码容器也可检查我们之前链码打印的日志来确定是否可以正确查询测试用例。

    e2dc5a149e1348f3ab3aff588fddb403.png

    图24 SDK代码执行结果

    0dfd601518f54fd8b263995dbb913a2c.png

    图25 查看区块链节点peer中的运行结果

    9697e8651d244dbf9e3aa942ed9bb0a7.png

    图26 链码运行结果

    本文通过一个简单的例子介绍如何通过华为云提供的区块链服务快速的开发和搭建起一个应用,用户可以根据所需的场景,基于本文的示例部署区块链服务,开发链码和业务层应用。

    本文只阐述了部分代码的实现,完整的代码下载地址是:

    https://github.com/cloud1230/testsystem

     

    展开全文
  • 华为云官网最新活动,新用户完成个人实名认证,参与问卷调研后即可免费试用,云产品0元试用,最长可达一年!!! 华为云服务立足于互联网领域,依托于华为公司雄厚的资本和强大的云计算研发实力,面向互联网增值服务...
  • “ 阿里云、梦网云通讯、容联云通讯、互亿无线这四家短信验证码平台都是怎么收费的,一条短信验证码价格多少钱,企业应当如何进行选择。今天评测下阿里云、梦网云通讯、容联云通讯和互亿无线短信验证码平台的短信验...
  • 首先按照之前的方式打好镜像 注意的是: 数据库地址要改 第一个ip地址是对外访问的ip地址 要是 服务器的对外的...改成edge的内部的通讯地址 sso的dockerfile的文件要修改: FROM mykro/java8-jre 打完包之后 把打...
  • (小声BB一句:其实最大的优点是用的人很多)缺点嘛就是聊天文件不打开会过期、表情包300个限制、聊天记录不能同步等等...最重要的还是我们的聊天记录和聊天文件,要是丢了真的无处可找了。小雷以前没注意备份,手机...
  • 点击上方“LiveVideoStack”关注我们本文来自华为云媒体服务直播产品经理 许键树在LiveVideoStack公开课的分享,结合华为云在直播领域的实践经验,详细解析如何对直播卡顿...
  •  回看华为云的整个成长史,你会发现华为云致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界的愿景和决心从未改变! 2017年3月9日华为副董事长徐直军宣布成立Cloud BU之后,华为云才正式...
  •  回看华为云的整个成长史,你会发现华为云致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界的愿景和决心从未改变! 2017年3月9日华为副董事长徐直军宣布成立Cloud BU之后,华为云才正式...
  • 1.华为云服务器 2.centos7.4 3.Mysql 5.7 远程登录mysql的时候报错 2003:Can’t connect toMySQL server on ‘ip’ 检查 1.mysql 服务启动情况 --正常 2.云安全组端口配置情况 --正常 3.用户权限情况 --正常 ...
  • 升级日志包括平台的日志,车端与平台通信产生的日志和车端升级程序搜集上来的日志。主要用于升级失败后的分析和支撑升级运维运营管理。 OTA车端主要包含通信终端和各功能域的ECU。OTA通信终端一般由TBOX负责,...
  • 我想问一下,现在bc35-g的设备接入华为云通讯协议使用coap协议,怎么激活设备啊,到处都没有什么帖子有教,求求大佬们教一下吧。
  • 实验摘要 登录华为云-资源下载-编译构建智慧路灯应用 DevCloud-创建主题并订阅 SMN-创建弹性云服务器 ECS-部署智慧路灯应用 DevCloud-导入产品模型 IoTDA-配置智慧路灯应用 Web 结果验证 最后,正值1024程序员狂欢...
  • 2.3.2通讯方式 该开发板主要包括以太网接口,232串口通讯(带DB9母接口),USB转串口通讯,带Mini USB接口。USB主设备读取U盘文件,USB从设备,模拟U盘,CAN通讯、485通讯,皆带接线端子。 红外通讯:红外接收头...
  • 离华为开发者大会2020(Cloud)开幕仅剩一月左右,让开发者们和华为大咖近距离沟通的扫地僧早午餐会也已经开放预约。但是,有些小伙伴们已经等不及到二月了,别急,福利这不就来了吗!...今日大咖:姜宇 华为云...
  • 升级的华为云“GaussDB”还能战否?

    千次阅读 2020-08-26 09:50:52
    芯片、操作系统、数据库是现代信息技术领域的三大核心基础,做数据库,不仅需要技术和投入,对华为这种做通讯起家的企业,更需要的是一种并非玩票性质的态度。
  • 击石乃有火:华为云的生长逻辑

    千次阅读 2018-09-21 17:39:24
    在财经天下的封面文章《华为云的快与慢》中,透过对华为云总裁郑叶来的专访,很多平常我们看不到的企业决策思路、判断方式、发展思考,都可以在这篇文章里见到。 当然,专访的价值在于铺陈足够多的东西,让读者自行...
  • 通常一个Profile文件包含如下方面的内容(其实就是对要表示的产品或者设备的功能和属性进行了一些分类要求,来自华为云) 下面这个是智慧路灯项目中的路灯的Profile文件中的部分内容 类似这些基本信息,是产品或者...
  • 华为公有同城容灾方案配置&华为公有linux服务器上ssh登录的安全加固 1、需求分析(或者应用场景) 同城容灾: 同城容灾 是在同城或相近区域内 ( ≤ 200K M )建立两个数据中心 : 一个为数据中心,负责日常...
  • 金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI还是熟悉的华为开发者大会 (HDC),还是熟悉的余承东。也还是一贯地擅长宣布“世界第一”:业界首个千亿级生成与理解中文NLP大模型...
  • 摘要:针对企业AI开发应用中面临的痛点和难点,为大家带来从实践...在2020年12月20日QCon全球软件开发大会 2020上海站上,华为云AI首席技术布道师陈亮携手四位华为AI领域博士,带来题为“全栈全场景AI应用开发实践”的
  • 物联网平台盘点

    千次阅读 2020-02-25 10:28:23
    物联网平台盘点 物联网平台是一个专门为物联网定制的平台,物联网与普通的互联网是不同的:物联网终端设备比普通互联网手机端,电脑端多出几个数量级;普通互联网对http,https协议访问相对单一,而物联网对https...
  • HDP 连接故障: a) vAG 故障 b) TC/SC 与 vAG 通讯异常 c) vAG 与 HDC 通讯异常 d) vAG 与 HDA 通讯异常 3. CloudClient、vAG、HDC、HDA 版本不一致 4. CloudCient 与 vAG 建立 SSL 连接失败 如果有自助维护平台,...
  • 武汉安安物联将研发方向瞄准了音视频行业,通过自主研发的“平台+端”系统架构,集成华为云会议的音视频技术,实现犹如“面对面沟通”的实时双向视音频通讯。在具体开发过程中,经过扎根用户现场,发现一线员工遍布...
  • 9月17日,在2020年云栖大会上,阿里智能总裁张建锋展示了第一台电脑“无影”。无影”是一台长在上的“超级电脑”,在本地没有主机,也看不见电脑CPU和硬盘的影子,因为这些硬件设备都集中在云端的数据中心。...
  • 【重大喜讯】公元2020年10月30日下午,广州六度共识科技有限公司旗下区块链技术平台“六度共识云”通过中国华为云的鲲鹏生态兼容认证。意味着基于国产华为海思麒麟芯片的鲲鹏主机硬件产品,可以良好地搭载六度共识...
  • 同时结合环信即时通讯云和客服云详细讲解了用户增长、利用IM做拉新促活、降本增效的具体方法及策略,也分享了环信联合华为云助力企业数字化转型的成功实践,现在让我们来一起回顾一下要点吧! 王璨总监在直播中谈...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,804
精华内容 2,721
关键字:

华为云通讯