• [交流分享] 物联网小课堂之NB-IoT无线通信中的发射功率和接收灵敏度
    大家好,欢迎来到本期物联网技术小课堂,今天我们将给大家就蜂窝无线通信中发射功率和接收灵敏度的概念做详细讲解,若有不对!还请各位大佬及时批评指正!上图就是蜂窝通信网络的基本结构,也就是我们日常生活中使用的手机网络结构。在切入正题之前,我们先来看下目前的几种重要的无线通信技术的特点:先看LoRa,美国semtech公司创建的低功耗局域网无线标准。2015年成立的LoRa联盟在全球积极推动LoRa技术的商用。国内**通讯发起成立中国LoRa应用联盟(CLAA)。通信距离城镇2-5Km,郊区10Km左右;通信速率十到百Kbps左右;ISM工作频段 包括433、868、915 MH等。因其商用和成熟度限制,应用规模较小,现集中于企业级的私网应用。再看Sigfox,实际是Sigfox建立的一套自上而下,从芯片、终端、网络、后台数据和云服务的生态。Sigfox无线接入网利用超窄带UNB技术,实现小数据低功耗数据传输。ISM工作频段,农村地区传输距离约30-50km,城市3-10km。好了!闲话到此为止!咳!咳!咳!没抓住重点有点跑偏了,其实大陆地区还是要看NB-IoT的戏台。(样品领取微信公众号:OneMO2019)言归正传,上面表格中提到的LoRa、SigFox、NB-IoT以及eMTC都是通过电磁波进行信息传输。电磁波能量的单位是W,dBm。发射功率,就是我们喊话的时候嗓门有多大。嗓门大了声音传的就远,嗓门小声音传的就近。实际就是指发射机的发出电磁波的能量。接收灵敏度呢,就是你耳朵能识别到的最小声音。发射机发送的电磁波经过空间损耗后,达到接收机,接收机能够识别到的、最低的电磁波能量。通常来说2G物联网模组的接收灵敏度在-108dBm左右。负的越多,灵敏度也就越高,有效距离也就越远。接收灵敏度采用dBm单位而不采用W作为单位,是因为其具体数值太小。它们两者之间关系如下:按照这个公式,NB-IoT模组的接收灵敏度-130dBm,可以换算成毫瓦值为:0.0000000000001mW。0太多,有点晕,容我喝口水压压惊。。。现在设想,我们在吵杂的马路上,此时讲话对方听不见,最简单的方式就提高声音;此时吵杂的环境就相当于外部干扰,外部干扰的大小直接影响接收机的接收效果。此时可以提高发射功率(加大嗓门),也可以提高接收灵敏度(两人距离近一点)。也就是说这两个指标对于“通信”来说都极其重要。无线通信模组是物联网通信设备的核心器件,帮助物联网终端实现数据的空中传输。即上文提到的发射机或接收机的作用。发射功率和接受灵敏度对模组性能的两个重要指标,下面以中移物联网NB无线通信模组M5311为例:(热点技术讨论QQ群:123242102)M5311模组RF输出功率22.5dBm,换算成W约为178mW。这是个什么概念?某2G模组在900M Class 4条件下2W输出功率。一眼见高低。NB-IoT如此低的功耗,接收灵敏度如何?在上面其实已经啰嗦过了,传统2G终端接收灵敏度在-108dBm左右,换算为瓦特值为1.6*10-11mW,而NB-IoT模组呢,以M5311为例在-130dBm接收灵敏度情况下,约为1*10-13mW。好了,今天的课程就给各位分享到这里,下次我们再给大家分享其他小知识。感谢各位大佬收听。下期在会!小弟我初来此地,还望各位大佬多多包涵,如有不对请及时指正!文章中含有小彩蛋,各位大佬可以仔细看看哦!
  • [问题求助] 物联网小课堂之NB-IoT无线通信中的发射功率和接收灵敏度
    大家好,欢迎来到本期物联网技术小课堂,今天我们将给大家就蜂窝无线通信中发射功率和接收灵敏度的概念做详细讲解,若有不对!还请各位大佬及时批评指正!上图就是蜂窝通信网络的基本结构,也就是我们日常生活中使用的手机网络结构。在切入正题之前,我们先来看下目前的几种重要的无线通信技术的特点:先看LoRa,美国semtech公司创建的低功耗局域网无线标准。2015年成立的LoRa联盟在全球积极推动LoRa技术的商用。国内**通讯发起成立中国LoRa应用联盟(CLAA)。通信距离城镇2-5Km,郊区10Km左右;通信速率十到百Kbps左右;ISM工作频段 包括433、868、915 MH等。因其商用和成熟度限制,应用规模较小,现集中于企业级的私网应用。再看Sigfox,实际是Sigfox建立的一套自上而下,从芯片、终端、网络、后台数据和云服务的生态。Sigfox无线接入网利用超窄带UNB技术,实现小数据低功耗数据传输。ISM工作频段,农村地区传输距离约30-50km,城市3-10km。好了!闲话到此为止!咳!咳!咳!没抓住重点有点跑偏了,其实大陆地区还是要看NB-IoT的戏台。(样品领取微信公众号:OneMO2019)言归正传,上面表格中提到的LoRa、SigFox、NB-IoT以及eMTC都是通过电磁波进行信息传输。电磁波能量的单位是W,dBm。发射功率,就是我们喊话的时候嗓门有多大。嗓门大了声音传的就远,嗓门小声音传的就近。实际就是指发射机的发出电磁波的能量。接收灵敏度呢,就是你耳朵能识别到的最小声音。发射机发送的电磁波经过空间损耗后,达到接收机,接收机能够识别到的、最低的电磁波能量。通常来说2G物联网模组的接收灵敏度在-108dBm左右。负的越多,灵敏度也就越高,有效距离也就越远。接收灵敏度采用dBm单位而不采用W作为单位,是因为其具体数值太小。它们两者之间关系如下:按照这个公式,NB-IoT模组的接收灵敏度-130dBm,可以换算成毫瓦值为:0.0000000000001mW。0太多,有点晕,容我喝口水压压惊。。。现在设想,我们在吵杂的马路上,此时讲话对方听不见,最简单的方式就提高声音;此时吵杂的环境就相当于外部干扰,外部干扰的大小直接影响接收机的接收效果。此时可以提高发射功率(加大嗓门),也可以提高接收灵敏度(两人距离近一点)。也就是说这两个指标对于“通信”来说都极其重要。无线通信模组是物联网通信设备的核心器件,帮助物联网终端实现数据的空中传输。即上文提到的发射机或接收机的作用。发射功率和接受灵敏度对模组性能的两个重要指标,下面以中移物联网NB无线通信模组M5311为例:(热点技术讨论QQ群:123242102)M5311模组RF输出功率22.5dBm,换算成W约为178mW。这是个什么概念?某2G模组在900M Class 4条件下2W输出功率。一眼见高低。NB-IoT如此低的功耗,接收灵敏度如何?在上面其实已经啰嗦过了,传统2G终端接收灵敏度在-108dBm左右,换算为瓦特值为1.6*10-11mW,而NB-IoT模组呢,以M5311为例在-130dBm接收灵敏度情况下,约为1*10-13mW。好了,今天的课程就给各位分享到这里,下次我们再给大家分享其他小知识。感谢各位大佬收听。下期在会!小弟我初来此地,还望各位大佬多多包涵,如有不对请及时指正!文章中含有小彩蛋,各位大佬可以仔细看看哦!
  • [专题汇总] 【华为物联网开发从入门到精通连载1】第六课 安装及配置SoftRadio【转】
    上节课,我们一起学习了注册设备,这节课我们继续按照基于SoftRadio模拟器进行OceanConnect平台对接整体流程,学习如何安装及配置SoftRadio。希望通过本节课程,了解华为SoftRadio软件以及如何安装及配置SoftRadio。Device以及APP应用开发与调试过程中,Open Lab是最重要的锚点,连接厂家device和海思芯片/模组接入NB-IoT网络,同时连接IoT平台以及APP server。由于NB-IoT的标准协议在16年6月底冻结,NB-IoT的芯片/模组还没有规模生产,同时华为Open Lab资源紧张,给产业链合作伙伴的device以及APP应用的开发调测增加了成本,同时导致调试效率低下。在此背景下,考虑用一个软件版本,来代替NB-IoT Chipset/Module,同时屏蔽NB-IoT Air Interface,提供一条通路直接到IoT平台,合作伙伴在自己家里就可以远程连接到华为IoT平台,进行终端和APP应用的开发以及端到端调测,实现offsite模式,不受时间和空间以及硬件限制,这就是SoftRadio。SoftRadio是一款PC软件,在测试场景下,合伙伙伴在不需要芯片/模组、NB-IoT基站和核心网的情况下,借助PC端的SoftRadio软件,任何时候都可通过互联网连接到IoT平台和APP应用,用于NB-IoT设备到APP Server端到端的基本功能调试,大大提升调试效率,加速Usecase业务快速上市。更多内容,烦请点击下方图片,学习如何安装及配置SoftRadio。学习完第六课的童鞋,恭喜你,你离物联网大咖又近了一步。第六课结束后,我们成功的学习了如何安装及配置SoftRadio,下节课我们学习如何使用SoftRadio进行数据上报。【已经上线】第七课  使用SoftRadio进行数据上报
  • 使用DevCloud Maven私有依赖库,如何批量迁移本地组件和维护?
     DevCloud Maven私有依赖库批量迁移和维护工具介绍                                                                                                                                                  使用场景: 1.当你需要使用华为云DevCloud中的maven私有依赖库服务时,迁移神器可以帮助你将原来自己本地私服中的私有组件批量迁移到云上。2.当你需要对DevCloud上maven私有依赖库中的组件进行批量更新维护时,该工具也能提供帮助。必要准备条件:安装JDK1.7+以上。 JDK下载地址:https://repo.huaweicloud.com/java/    使用方法:1.登录华为云并进入DevCloud服务,从左上角目录菜单中进入私有依赖库服务,如下图:2.在Maven私有依赖库中选择"更多操作”>>“批量迁移和维护”操作下载工具包,如下图:3.双击打开工具包,展示如下页面:                                  说明:1)选择本地目录上传时,如果目录中只有jar包而没有匹配的坐标说明文件pom.xml将无法上传成功。2)同一目录下的jar包必须要和其对应的POM文件同名,否则会提示查询失败。4.在DevCloud Maven私有依赖库页面,通过选择“更多操作”>>“仓库地址”可以获取上诉工具需要填入的maven私有依赖库仓库地址,复制后填入即可。5.在DevCloud Maven私有依赖库页面,通过选择“立即使用”后弹出的提示框中可以下载maven setting.xml配置文件,setting.xml文件中<server></server>标签中的username和password的内容就是工具需要的私有依赖库的账号和密码。如下图最后,如您在使用中有任何疑问或建议,可直接在帖子中回帖或通过DevCloud页面中右上角区域的“意见反馈”找到我们获取帮助,我们将会及时响应。祝使用开心!
  • [技术干货] 【动手体验】使用Java SDK管理华为云对象存储OBS
    实验目的通过使用Java+SDK管理华为云对象存储OBS,了解对象存储的基本原理和操作,熟悉SDK的使用方法,为后续需要开发复杂功能提供入门准备。准备动作1、电脑上安装Java开发环境+Eclipse,可参考网上的教程:Java安装教程:http://www.runoob.com/java/java-environment-setup.html#win-installEclipse+汉化教程:https://blog.csdn.net/weixin_41848531/article/details/817364142、下载华为云OBS SDK,笔者编辑本文时,最小版本是OBS Java SDK 3.0.0 ,SDK安装过程如下:a.下载OBS Java SDK开发包。b. 在Eclipse中创建一个Java工程b. 将解压后的文件:esdk-obs-java-<versionId>.jar 以及third_party文件夹下所有的JAR包拷贝到您的项目中。c. 在Eclipse中选择您的工程,右击选择 Properties > Java Build Path > Add JARs。3、下载OBS的访问密钥key文件。a. 登陆华为云网站(www.huaweicloud.com),进入OBS控制台,下载访问密钥。密钥key是一个xxx.csv的表格文件,其中Access Key Id对应OBS API中的ak,Secret Access Key对应OBS API中的sk。密钥key的作用:通过网站访问对象存储OBS,需要先通过账号密码登陆网站。通过代码访问OBS,如果也需要输入账号密码,就会使得的代码变复杂。因此密钥key可以认为是经过加密的账号和密码,代码中可直接使用。 密钥key文件只在生成的时候提供下载,因此下载后需妥善保存。4、打开JDK包中的开发指南《对象存储Java SDK开发指南.doc》内含丰富的说明。操作步骤 1、在eclipse工程中左侧工具栏中找到自动生成的xxx.java,编写一个java类,输出欢迎语句。点击eclispe工具栏上的 调试或运行按钮,在结果中可看到欢迎语句。package main; import java.io.*;import java.io.IOException; public class main {public static void main(String[] args) {System.out.println("welcome to china!!!");}}2、创建一个OBS客户端。电脑是访问OBS的客户端,华为云的OBS是服务器。2.1 公有云的数据中心是分区域的,每个OBS访问地址都是通过“后缀endpoint”来指定数据是存放在哪个区域的数据中心的。“后缀endpoint”的查询地址:https://developer.huaweicloud.com/endpoint3.3 参考《对象存储服务Java SDK开发指南.doc》分别编辑创建OBS客户端、创建桶、上传对象和查看所有对象,具体代码参考后续完整代码。3.4 点击eclipse的调试或运行按钮,在控制台中显示创建桶成功,显示所有对象成功。控制台中提示日志插件和性能统计错误,不影响功能,可忽略不计。3.5 在华为云OBS 对象存储控制台中,可看到新增生成的桶和上传的文件。完整代码package main; import java.io.*;import java.io.IOException; import com.obs.services.ObsClient;import com.obs.services.exception.Ob**ception;import com.obs.services.model.*;  public class main {/* 初始化OBS客户端所需的参数 */private static final String endPoint     = "https://your endpoint";private static final String ak           = "your ak";private static final String sk           = "your sk";private static final String g_bucketName = "hello-obs-demo";private static final String g_bucketLoc  = "cn-south-1"; public static void main(String[] args) {System.out.println("welcome to china!!!");/* 创建OBS客户端 */ObsClient obsClient = new ObsClient(ak,sk,endPoint);ObsBucket obsBucket;try {/* 创建一个桶 */obsBucket = createBucket(obsClient);/* 从本地笔记本上传文件到桶里面 */uploadFile(obsClient, obsBucket);/* 列举对象(文件)的信息 */listFile(obsClient,obsBucket);/* 关闭客户端 */}catch (Ob**ception e){System.out.println("main 函数出现错误!!!");}/* 关闭obs客户端  */closeObsClient(obsClient);}/* 创建一个桶 */private static ObsBucket createBucket(ObsClient obsClient) throws Ob**ception{ObsBucket obsBucket = new ObsBucket(g_bucketName,g_bucketLoc);        obsClient.createBucket(obsBucket);        System.out.println("Create bucket:" + g_bucketName + " successfully!");        return obsBucket;}/* 创建一个对象(文件) */private static void uploadFile(ObsClient obsClient, ObsBucket obsBucket) throws Ob**ception{File newfile = new File("C:\\Users\\xiaoniu\\Desktop\\temp\\hello.txt");obsClient.putObject(obsBucket.getBucketName(), "folder/", newfile);obsClient.putObject(obsBucket.getBucketName(), "hello1", newfile);obsClient.putObject(obsBucket.getBucketName(), "hello2", newfile);}/* 列举对象(文件)的信息 */private static void listFile(ObsClient obsClient, ObsBucket obsBucket) throws Ob**ception{System.out.println("开始测试桶里面的对象信息");ObjectListing objList = obsClient.listObjects(obsBucket.getBucketName());for (ObsObject obj : objList.getObjects()){System.out.println("--:"+obj.getObjectKey()+" (size=" + obj.getMetadata().getContentLength()+")");}}/* 关闭客户端 */private static void closeObsClient(ObsClient obsClient) {try{obsClient.close();}catch (IOException e){System.out.println("close obs client error.");}}}
  • [HC我来了] 大会之前,我在电话中跟恒少聊了聊……
    通常,我们眼中的软件开发是这个样子的……工作高端、大气、上档次,这是一件化腐朽为神奇的事儿,更是一股充满创造的力量……然而在程序猿们的眼中,软件开发竟然是……好不容易才搭建好一个开发环境,费了九牛二虎之力,悲催的是竟然无法使用,第一步都如此不顺,上线更是遥遥无期……团队同事临时被抽调出差,不巧,他写的代码出现bug,我竟然无权限修改,内心的崩溃在风中凌乱……提升软件质量靠代码,这事儿没错,但交叉看谁有时间?找大拿?更没工夫……这事儿简直太累了…… 新旧代码交替繁乱,质量效果各不相同,频繁修补之后,本地记录早已“千疮百孔”,自己看着都头痛……尽管这些问题还不算是软件开发过程中出现的全部障碍,此外还有业务沟通、工程交互、部署测试等说不完的困难……但却是开发者们真实且经常遭遇的“神坑”,难道没有办法解决吗?恒少,一位来自华为云的技术专家,也是我这篇科技圈时髦文体《XXX时间,我跟XX聊了聊》文章的主人公。他听完我的吐槽,并没有立即推荐各种高效的解决方案,而是给我讲述了他与软件开发以及华为的“情缘”。恒少认真地说:“软件开发一直都是我特别喜欢的工作,工科类的学生似乎都很喜欢动手创造新事物这种感觉,软件开发正好符合这一点。” 传说中的恒少据他介绍,如今在华为云,软件开发服务(DevCloud)已经将数万研发人员、三十年积淀的研发工具、经验开放到公有云上,以项目管理、代码托管、代码检查、CloudIDE等九大服务为基础,提供了IOT、Web开发等众多解决方案。“就像你刚才提到的代码问题,其实在华为云软件开发中就有相应的检查服务,DevCloud提供了1288条规则来保障软件质量,未来还会持续注入先进技术确保云端代码检查规则实时更新。”恒少表示。更重要的一点,他强调,华为云软件开发服务不单单只是发现问题,主要还是着眼于解决。提供的软件流水线可以随意编排代码检查、测试、部署和子流水线等服务,通过可视化编排和一键式部署,确实将软件上线周期缩短50%,尤其对中小企业帮助很大。如今,恒少的工作内容主要基于华为云,所以他比任何人都清楚、都了解。掐指一算今年正是他在华为一线奋战的第十三个年头,听完讲述,我深深感觉到,恒少这段精彩又充满挑战的经历,真的可以称作华为30年研发沉淀的缩影。慕名进华为,近距离感受开发者文化如果详细展开这个故事,时间还要追溯到2005年,那时的恒少刚刚走出大学的校园,从本科学习自动控制专业到研究生继续攻读系统工程,最后怀揣着“软件开发”的初心走入华为这个大家庭。 谈及当时走进华为的选择,恒少很实在。“那时候学校中很多前辈都出自华为,更重要的是华为很重视我们这种类型的毕业生,毕竟是第一份工作,太有吸引力了!”他表示。企业的软件开发面向行业交付,要求质量、进度;而学校中的软件科研项目更偏向于技术的探索,尽管在视野上得到了创新,但这种偏差让却没少让恒少“吃苦头”,将知识转化为产品,还得好用,这事儿说来容易做起难。十几年前,华为主要还是做电信类产品,恒少作为一名初来乍到的程序员,就参与了刚刚立项不久的产品软件开发。但由于电信类产品都是基于协议的,正巧经手的产品其国际协议又刚刚发布不久。将厚厚的一沓协议转变为可稳定运行的产品以及解决方案,这个难度可想而知。作为一个新人,代码才略懂,就直接去做产品调试以及协议接口等工作。恒少表示,至今都记得,在嘈杂的机房中看着一堆堆error的协议消息,背后是周边产品焦急等待的同事这样一个场景……初来的开发人员面对像恒少一样的窘境,难免会措手不及。但庆幸的是,华为凭借自身多年的培养体系积累,可以为开发者人员们提供大量有价值的资料并引导学习;甚至还设置专门的导师制度,手把手帮助解决业务问题、熟悉团队运作等,这种大而细致的开发者文化让恒少至今都记忆犹新。“作为开发人员,从技术角度看,华为是先进的。但对开发者来说更重要的一点,在华为可以将自己所学,无论是编程还是代码,实实在在融入软件中,让需要的人使用,这是我们特别希望的一种方式。”恒少补充道。如今恒少将工作内容转向势头正旺的华为云业务,他深深感受到,华为发力云计算业务之后,对开发者的引力越发强大。30年的积累、9万多用户……除了继承企业优良的开发者文化,更多还让人们意识到华为云巨大的成长空间以及良性的创造氛围,对于开发者们来说,华为过去或许很“传统”,但现在却很“互联网”。华为:冷静对待热点、较真产品质量谈及华为云服务,优先级的产品质量、被视为头条的用户体验、持续提升的研发效能、予以坚持的战略投入……这些特性都会一一蹦出脑海。但在30多年的产品研发中,华为并不是一开始就对这些先知先觉,而是历经波折才更加意识到质量、效能、用户体验的极度重要性,对此恒少深有体会,可以说在华为的工作经历教会了开发人员对产品质量始终保持敬畏之心。从传统IT到企业云服务,用户至上的信条被传承,但对技术方向的敏锐捕捉,华为却始终目光如炬,在“变与不变”中谋求进一步的发展。在采访中,和恒少探讨“企业追逐技术热点”的问题,他表示,在企业追逐风口的过程中,华为最大的不同就是不盲目,这种冷静客观的态度被称为“拧麻花”。“在华为,长期的研究与短期的产品开发与交互会形成一种部署,绝对不会一味研究新技术而忽视了产品的走向,上新就要对相应的产品发生帮助,毕竟单纯研究新技术还是比较容易的事儿,而且更重要一点,华为追新也是循序渐进的,例如上云。”恒少强调。说到“上云”的历程,据了解,2008年左右,华为几乎与业界同步开始引入敏捷,并随后进行了从上至下的敏捷转型,希望以更敏捷的研发来应对日益短周期的市场交付,这个时间恒少也开始接触敏捷。总体来说,向敏捷的转型,华为面临了诸多挑战。很长一段时间,恒少也在思考,敏捷这件事儿与提升研发效能、优化产品质量和用户体验等,是否可以画个等号呢?就算推行了敏捷开发,似乎端到端的生命周期依旧很长,又该如何是好?对此,恒少有自己的一套理论,以前的华为产品主要面向运营商,SDD的流程不知不觉已经运转了十几年;但部署进入云计算领域后,之前的开发模式、市场交互模式等与之前完全不同,这个时候引入一个基于云服务的新流程是非常有必要的,所以敏捷势在必行。在这个理念的指导下,恒少与同事们开始推动敏捷逐渐从小团队走向整个产品。先进的方法、理念和实践的落地最终还是需要端到端的研发工具支持,所以恒少与同事们也同步启动了ALM(Application Lifecycle Management),整合并演进一批已有的研发工具,形成覆盖从需求到最终交付上线的软件全生命周期管理系统,达成从嵌入式软件到应用软件、云服务,并与芯片、硬件的生命周期管理形成整体解决方案,以“技术工程师”的角度协同软硬件团队一起发展。通常来说,我们知道的敏捷开发需要经过准备、计划、开发以及反馈四个阶段。与传统的敏捷模式不同,华为的新型模式会通过云端自动化的持续交付流水线来完成构建以及测试的工作,无论是接口还是可靠性,同时还可将Ops端手工操作的时间减少80%,团队可以充分聚焦于业务分析、开发交付及运营上,质量与效率可得到双保证。踏足云计算,循序渐进、不忘初心经过前期的积淀,华为于2016年正式进入云计算领域,敏捷只是“第一站”,DevOps作为云服务与生俱来的研发模式和流程,也开始被恒少以及同事们提上日程。随着华为云服务技术的逐渐成熟,其ICT研发实验室的服务化率先取得成功。客户很多时候通过Internet就可以访问遍布全国各地华为研究所的云化实验室资源,从基站到路由器,乃至终端设备。恒少表示,不但可以远程体验,还能将原先必须在客户侧搭建设备才能验证的测试放在实验室执行,大大缩短了客户需求的验证时间。谈及DevOps部署的经验,恒少觉得,最重要还是不要盲目追赶热点,毕竟DevOps的“上马”是需要一定基础的。通常来说,企业的属性为自运营,例如云服务的方式通过SaaS来提供,这样来看,企业就可以拥有属于自己的DevOps团队,Ops团队,然后融合使用DevOps方法。相比之下,很多企业经营外包业务,做好软件后交付给企业级用户,然后自行在中心机房中部署,软件的运维属于用户方,企业只是负责Dev,如果盲目去做DevOps,结果必然失败,认清自己的商业与交互模式对DevOps很重要。“另外,企业管理层是否支持更广层面的DevOps推广也很关键。当然,这些条件通通具备后,定期针对DevOps研发细致总结并同时更新工具也很必要。毕竟流程方法的实践最终还是通过工具来体现,文档是没有办法让大家高效使用的。”恒少补充道。其实以恒少为代表的华为人所做的一切,都是在思考如何从软件全生命周期的角度出发提升效能并保证质量。如今云厂商“琳琅满目”,回到华为云的软件开发服务,恒少对记者说:“我们的软件开发服务,很重要的一个特点就是提供的工具很多,尽管业界的工具也不少。这些工具沉淀了华为多年的研发实践经验,哪怕是如何规划、满足需求等细枝末节都包含其中,模板真实存在并可以供客户直接使用的,这种突出的转化效率是特征,更是优势。”华为云软件开发服务秉承了多年来华为内部“端到端”的理念,尽管不可避免的是某种特性或者功能上确有短板,但端到端的整合让用户再也无须考虑与工具之间的集成。简单来说,开通云服务就可使用,无论是接口对接、工具适配、还是上线部署与反馈,都是便捷又实在的事儿。“还有更重要的一点,也是华为云一直强调的口号,我们提供的DevOps工具链会管理用户的需求、代码,却真的看不到用户的信息,不碰数据是华为云软件开发服务安全的首要保证,另外不断更新的理念与方法也让我们持续保持创新的动力。”他进一步说。在采访的最后,恒少提到了即将开幕的华为全联接大会。他表示,华为从运营商设备、终端设备一路走来,如今又做起了云服务,形成了一套“云-管-端”的解决方案模式,对开发者而言,这可以说是业内最完整的解决方案了,从云端到管道,到边缘,再到手机端,是一个完整又丰富的生态。不管你从事底层的驱动开发、还是软件开发,抑或是云服务软件开发……都可以从华为全联接大会上学到很多东西,找到自己的兴趣点。 10月10日-10月12日,HUAWEI CONNECT 2018将以“+智能,见未来”为主题,携手来自全球的ICT产业领袖、行业先锋、生态伙伴、商界智囊,共同探讨如何利用智能技术把握未来行业新机遇,共襄数字转型,共创智能未来。届时,大会将首发华为AI战略和全栈全场景的解决方案,并携合作伙伴分享AI、云、大数据、5G、IoT、视频等在各行业的创新与实践。突破业界历史记录,2018华为全联接大会将上演近千场峰会和论坛,和超过三万平米的展示区,必将再次带给大家更多的惊喜与震撼。恒少个人主页
  • [行业前沿] 【ServiceComb最全 FAQ】 42个常见问题 大集锦1
    本帖最后由 橘色祥云楼楼主 于 2017-11-13 17:23 编辑Q: ServiceComb和SpringCloud是什么关系,具体的应用场景是什么?A: ServiceComb是华为基于内部多个大型IT系统实践提炼出来的一套微服务开发框架,在开发态基于最佳实践封装了一套微服务运行模型,这些能力对用户完全透明,可以通过配置引入功能和对其进行调整。在运维阶段充分考虑了微服务运维,提供了丰富的监控指标和动态治理能力。 B: ServiceComb的这套能力可以作为一个单独的开发框架,在需要轻量级微服务解决方案的的场景中单独使用,也可以建立在SpringCloud上,与SpringCloud提供的其他组件一起工作,在重量级场景中和SpringCloud一起产生 “1+1大于2”的效果。Q: 用IntelliJ的免费版开发,有什么问题?A: 没有问题,使用IntelliJ 开发,可参考 Setup Developer Environment 进行相应的环境配置。Q: 使用Java-Chassis这个框架时有什么需要注意的地方?A: 使用Java-Chassis有以下这些限制: (1) 0.3.0-SNAPS**之前的版本不支持类似@GetMapping这样的标注。 (2) 所用到的HTTP请求方法一样时,如GET,则方法名不能重载。这是由于生成契约时方法名会作为其Operation ID,所以要保证其唯一性。 (3) 方法和类必须是public的。Q: 使用spring-boot-starter-provider这个依赖时,在application.yml文件中声明的spring.main.web-application属性并没有生效?A: 使用starter-provider这个依赖时,如果用到了servlet这种方式时,需要在application.properties这个文件引入spring.main.web-application=true这样的属性或者在application.yml文件中声明,但是此时需要新建一个application.properties的文件,其内容可以为空。Q: 网关依赖的jar和其他微服务的一样吗? <groupId>io.servicecomb</groupId> <artifactId>spring-boot-starter-provider</artifactId> CopyA: 网关除了要依赖spring-boot-starter-provider之外还要依赖spring-boot-starter-discovery,可以参考LinuxCon-Beijing-Workshop中manager的实现。Q: 网关需要像其他微服务一样配置assembly吗?其中的/maven/gateway这个路径是docker maven plugin默认的吗?A: 需要,由于项目现在使用的是spring-boot的打包方式,docker maven plugin也是依赖打包生成的文件来生成docker镜像的。/maven这个路径是docker maven plugin指定的,而gateway这个路径是在assembly中指定的。Q: 服务接口的返回类型可以是任意类型吗?还是必须是responseEntity?A: 可以,具体可以参考java-chassis的integration-test的实现。Q: 微服务启动后,无法正确调用接口,使用的代码为: @RestController @RestSchema(schemaId = "worker") public class WorkerController { @RequestMapping(value="/count", method=RequestMethod.GET) public int getWorkerNumbers() { ... } } CopyA: 在没有指明根路径的情况下,默认会使用类名作为其根路径,即上述代码中可访问的路径应为/WorkerController/count。如果想要实现/count这样的访问,则要指明根路径: @RequestMapping(value = "/") public class WorkerController {} CopyQ: 如果没有指定RequestMapping这个标注的value时,默认的基本路径是什么?A: 假设你的Controller类名为HelloController,那么基本路径就是/HelloController。Q: 在eclipse下修改了microservice.yaml配置文件下的端口号,启动程序后,端口号没生效?A: 需要单独导入sample项目,如果导入整个ServiceComb-Java-Chassis项目,由于sample目录不在ServiceComb-Java-Chassis模块中,IDE不会对sample进行编译,eclipse下并没有提示错误信息,IDEA下会有提示信息。因此eclipse启动sample的demo会发现修改了端口没有生效。Q: 如何自定义某个Java方法对应的REST接口里的HTTP Status Code?A: 对于正常的返回值,可以通过SwaggerAnnotation实现,例如: @ApiResponse(code = 300, response = String.class, message = "") public int test(int x) { return 100; } Copy对于异常的返回值,可以通过抛出自定义的InvocationException实现,例如:、 public String testException(int code) { String strCode = String.valueOf(code); switch (code) { case 200: return strCode; case 456: throw new InvocationException(code, strCode, strCode + " error"); case 556: throw new InvocationException(code, strCode, Arrays.asList(strCode + " error")); case 557: throw new InvocationException(code, strCode, Arrays.asList(Arrays.asList(strCode + " error"))); default: break; } return "not expected"; } CopyQ: 如何定制自己微服务的日志配置?A: ServiceComb不绑定日志器,只是使用了slf4j,用户可以自由选择log4j/log4j2/logback等等。ServiceComb提供了一个log4j的扩展,在标准log4j的基础上,支持log4j的properties文件的增量配置。默认以规则:”classpath*:config/log4j.properties”加载配置文件实际会搜索出classpath中所有的config/log4j.properties和config/log4j.*.properties, 从搜索出的文件中切出\*的部分,进行alpha排序,然后按顺序加载,最后合成的文件作为log4j的配置文件。如果要使用ServiceComb的log4j扩展,则需要调用Log4jUtils.init,否则完全按标准的日志器的规则使用。Q: 当服务配置了多个transport的时候,在运行时是怎么选择使用哪个transport的?A:ServiceComb的consumer、transport、handler、producer之间是解耦的,各功能之间通过契约定义联合在一起工作的,即: consumer使用透明rpc,还是springmvc开发与使用highway,还是RESTful在网络上传输没有关系与producer是使用透明rpc,还是jaxrs,或者是springmvc开发,也没有关系handler也不感知,业务开发方式以及传输方式consumer访问producer,在运行时的transport选择上,总规则为: consumer的transport与producer的endpoint取交集,如果交集后,还有多个transport可选择,则轮流使用分解开来,存在以下场景:当一个微服务producer同时开放了highway以及RESTful的endpointconsumer进程中只部署了highway transport jar,则只会访问producer的highway endpointconsumer进程中只部署了RESTful transport jar,则只会访问producer的RESTful endpointconsumer进程中,同时部署了highway和RESTful transport jar,则会轮流访问producer的highway、RESTful endpoint如果,此时consumer想固定使用某个transport访问producer,可以在consumer进程的microservice.yaml中配置,指定transport的名称: servicecomb: references: <service_name>: transport: highwayCopy当一个微服务producer只开放了highway的endpointconsumer进程只部署了highway transport jar,则正常使用highway访问consumer进程只部署了RESTful transport jar,则无法访问consumer进程同时部署了highway和RESTful transport jar,则正常使用highway访问当一个微服务producer只开放了RESTful的endpointconsumer进程只部署了highway transport jar,则无法访问consumer进程只部署了RESTful transport jar,则正常使用RESTful访问consumer进程同时部署了highway和RESTful transport jar,则正常使用RESTful访问
总条数:133 到第
上滑加载中