
能力说明:
了解变量作用域、Java类的结构,能够创建带main方法可执行的java应用,从命令行运行java程序;能够使用Java基本数据类型、运算符和控制结构、数组、循环结构书写和运行简单的Java程序。
暂时未有相关云产品技术能力~
阿里云技能认证
详细说明我是一名软件工程专业的大三学生,最大的特质就是执着,只要是我所选择的事情,我所选择的道路,我都会非常坚定的走下去。我喜欢挑战自我,喜欢在强手之中找到自己的位置,如果失败我会得到更大的动力,争取更大的成功。刚买了服务器,建议先通过ssh连接,市面上有很多产品,自己可以谷歌百度一下,本人用的是Xshell家族,首先确认下安全组里面的22端口放开(已默认打开)IP为公网IP,用户名为root,密码为你设置的密码,如果忘记了,找到管理控制台的实例菜单下如果发现网站打不开,首先应该检查下阿里云的安全组端口是否开放,不然费时费力,最后才想起,基本软件的安装可以自行百度一下都有。在云服务器ecs使用中除了端口开放之外,还有一个问题就是邮件发送问题,阿里云服务器默认关闭25的邮件端口,如需要邮件发送功能需改成465端口才可以。总而言之,通过“高校学生在家实践”计划,让我可以体验到阿里云服务器ecs的方方面面,确实服务器的体验上是挺好的,在这个过程中,为了部署项目,到处查阅资料,感受颇深,不过也学习到了很多的东西,有了经验,以后就能在运维上更加游刃有余了。
我作为一名准大二的软件技术专业的学生。在课堂中,由于学习的需要,老师给我们介绍了阿里云服务器,因为学生资金比较紧缺,我选择加入了“飞天加速计划-高校学生在家实践”活动。对于我等学生党来说,真的是很大一个福利,就参加学习实践一下,也特别感谢阿里云给了我们这些初学者打进云服务器的敲门砖。 我仅仅用了四步就达成了免费申领云服务器的资格,拥有了一台云服务器后,我不禁想到如何才能够利用好这台服务器,给我的生活带来更多便捷和乐趣。带着这个目标,我开始广泛地了解服务器的原理和应用同时在课上更加认真的听老师的讲课。 云服务器一般都会安装Linux操作系统,它不同于平常使用的Windows,命令行操作是它的灵魂所在,虽然也可以安装有操作界面的版本,但既然是要学习云服务器,学习Linux,最好还是直接学习它的核心所在,乖乖的使用命令行的方式进行操作。因为是第一次使用阿里云服务器ECS,对使用过程不太熟悉,遇到了很多的困难,比如对Linux语句的不熟悉。在完成服务器的选择后,第一步就是配置自己项目的运行环境。经过对阿里云ECS服务器的使用与熟悉,逐渐对服务器有了个初步的认识。在使用过程中,让我难忘的就是创建一个实例,搭建服务器的过程,虽然这个过程挺艰难的,但是按照网上的教程一步一步来就能完成的。在” 高校学生在家实践”之前,我还不会搭建服务器环境和部署项目的,但有了这次的活动,我也掌握了一项了。 通过使用服务器这一段时间后,我获得了很多宝贵的经验,懂得了怎么进行简单的配置服务器。“飞天加速计划·高校学生在家实践”活动非常棒,帮助了许多高校学生,学习到了相关的知识,我也会在今后继续深入学习,完成我心中所想,搭建一个属于自己设计的网站。感谢阿里云带我成功入门,领略了服务器世界的好玩与精彩。同时让我离自己的梦想又进了一步。
我是来自河南牧业经济学院的学生,就读于软件技术专业的大二学生。学习期间在互联产品运维测试老师那了解到了“飞天加速计划·高校学生在家实践”活动,通过简单的答题和一系列的操作后,我领取到了一台免费的ECS云服务器,并计划将其作为之后自学相应网站开发的基础。 我对于云服务器的使用却是第一次,所以对于云服务器的连接以及Linux命令的使用不是特别熟悉,但通过阿里云领取服务器之前的教程,基本掌握了服务器的基本操作。然后在课上跟着老师的讲解学习了linux和java,掌握了基本的linux命令,比如返回文件夹、添加文件夹、进入文件夹、清屏等等指令并且可以远程连接到自己的服务器。阿里云服务器相较于以往的虚拟机在安装及使用上方便了许多,从一开始的安装就省去了很多繁琐的步骤,以往Linux的安装都有不少的步骤,而阿里云ECS服务器只需要选择几个选项便能生成,在操作上,阿里云ECS服务器跟以往Linux虚拟机相差无几,Linux操作系统也都是通过控制台命令进行操作。在完成服务器的选择后,第一步就是配置自己项目的运行环境,我使用的是Xftp 7来实现图形界面上传文件。 通过这次的云服务器ECS的使用,我收获颇丰,第一次将项目放到了服务器上进行访问,在过程中,遇到的困难只是tomcat老是异常报错,通过网络找各种解决方法删除重新。 通过利用ECS云服务器来搭建网站,我对于ECS云服务器的使用有了一定的了解。也让我第一次了解了云服务器(Elastic Compute Service, 简称ECS),是一种简单高效,处理能力可以弹性伸缩的计算服务。希望可以通过阿里云的“飞天加速计划·高校学生在家实践”活动能让我在家学习到更多的技术。并且再未来的时间,我会继续用阿里云服务器学习到更多知识并且熟练运用云服务器。
本人现在就读于计算机科学与技术专业,是一名即将毕业的计算机学生,起初打算在阿里云购买一个服务器,后来从同学口中得知可以免费领取一个服务器,于是也就了解到了“飞天加速计划~高校学生在家实践”的活动,很感激阿里云的这次活动,让我对云服务有了初步的了解,而且让我们这些在校大学生能够免费的体验和操作云服务器,现在就我对自己购买的服务器做一个简单的自我了解。ESC:云服务器,是一种简单高效,处理能力可以弹性伸缩的计算服务。实例:是一个虚拟的计算环境,由CPU、内存、系统盘和运行的操作系统组成;ESC实例作为云服务器最为核心的概念,其他资源,比如磁盘,IP,镜像,快照等,只有与ESC结合后才具有使用意义。地域:指ESC实例所在的物理位置。地域内的ESC实例内网是互通的,不同的地域间ESC实例内网不互通。可用区:指在同一地域内,电力和网络互相独立的物理区域。磁盘:是为ESC实例提供数据块级别的数据存储。可分为4类:普通云盘、SSD云盘、高效云盘和本地SSD磁盘。快照:是某一个时间点上某个磁盘的数据拷贝。镜像:是ESC实例运行环境的模板,一般包括操作系统和预装的软件安全组:是一种虚拟防火墙,具备状态检测包过滤功能。每一个实例至少属于一个安全组。我们需要将自己要开发的端口加入到安全组起初,我们在购买了服务器之后,我们先添加安全组开放端口,然后便是搭建各种环境,在搭建好mysql、php、apache等等环境之后,让我们使用服务器来搭建一个我们自己的个人网站,首先我们需要一个域名,于是我从阿里云购买了一个属于自己的域名,之后便是域名实名验证以及域名的备案,在之后便是将域名解析,最后就是创建一个属于自己的第一个小网站。
邂逅ECS 与ECS的邂逅发生在我大一的暑假的时候,只”看”一眼就深深被”她”吸引,随即便撇下VM,头也不回的跑向ECS。我是一名大专生,学的专业是软件技术,面对大学生活我不想再向以前一样荒废下去了,也就开始走上程序员的不归路。每天花大量时间学习,用了8个月左右,怎么说也是把java啃到了spring cloud alibaba了。在进行项目开发时,通过视频,了解到了阿里云ECS,也通过自己的资料收集——其实就是不想多花钱——了接到了飞天加速计划,这等好事怎么可能就这么错过了呢? ECS真的节省了我大量的时间,每次开机都要打开VM真的是一件很令人头疼的事情。更别说VM经常的崩溃和蓝屏,甚至有一次强制关机之后,VM直接坏掉了,这些经历真的是让我泪流满面。如果把VM比作孩子的话,那么ECS可真的算是一个母亲了,对于我的请求可以说是有求必应,免去我很多操作——没错,我就是妈宝男——因为我现在只是在使用ECS的初步阶段,并没有什么自己独到的见解,也是在开发项目中需要用到什么就去学什么。人无完人嘛,在操作中我也遇到了一些问题,不能随意的增加ECS的配置,毕竟对于学生党来说,还是有一点贵的。当然对于ECS的功能来说这个价格其实并不高,但是导致当开发项目过大运行进程过多导致一些服务经常死掉,在测试项目的时候我就只好把当前模块不使用的应用关闭,然后测试,不过也很花时间,再给一个小小的建议希望能给在校学生再优惠一些。 在”白嫖”了ECS之后,我想就算试用期过了,我依然回对”她”不离不弃,舒适的体验,妈妈级的服务都让我产生了依赖。要说使用时最令我难忘的,莫过于是领取到第一台ECS,连接部署项目并运行后的激动感了,毕竟远程控制一台服务器对我我这个”涉世未深”的小白来说还是很新奇的体验!通过使用的深入,我也了解到了现在云技术的成熟,以前的我可是对云技术一窍不通,光听听就觉得很高大上。ECS让我的学习体验更好,省去了大量浪费的时间,就像很多java框架宣称的一样:”让程序员专注于业务的开发,而不是重复的劳动”,我想这就是ECS的理念之一吧。从使用ECS开始我也渐渐变得更像一个程序员,了解前辈们的工作,对于我来说也是很重要的。
大家好,我是来自河南省的一名因不能按时开学而在家上网课的大二学生,我的专业是软件技术,通过专业课老师的推荐我了解到了“飞天加速计划·高校学生在家实践”这个活动,这无疑给我和我的同学们提供了一个很好的平台。学校开设的“互联产品运维测试”这门课程,需要学习云服务的使用,但我们没有一个可以使用的平台。这个云服务器真的是很好的帮我们解决了这一难题,而且这个平台还有详细的教程,可以让我们这些第一次接触这方面知识的学生更快的跟上老师的脚步。阿里云非常的人性化,领取之前需要进行一个简单的测试而且有相关教程,以便更好的使用。成功领取服务器之后,老师让我们下载了远程操作工具Xshell7,这个软件不仅支持中文,而且完全免费,且功能非常强大。经过老师的讲解和实际操作之后,我知道了一些相关功能以及技巧,ECS可以搭建个人网站、小程序等,它很稳定很安全,它的性能也非常高,ECS适合作为应用程序的运行环境。还有,阿里云是互联网的,所以如果要用到什么软件,可以直接使用yum install去安装,非常方便飞天加速计划是个非常好的活动,它为无数在家中学习的大学生提供了一个稳定性强、容易使用、安全度高的云服务器,让大学生可以通过学习,做出属于自己的网页,可以和同学一起开发小程序、微信公众号等等。虽然我们还没有独立开发的能力,但是我相信,我们通过学习,一定会具备更高的能力。最后我想说的是,它让更多的人接触到了编程这一领域,也让更多的人可以去充分发挥自己的无限想象。希望自己能在这一方面做得更好,也希望更多的大学生加入到这一队列来,为自己增加一个新的技能!
在这几天的使用期间,我对阿里云ESC服务器有以下几点的感悟:1.阿里云使用起来,非常省力。不需要专门花时间去维护服务器的硬件,看服务器是否运行正常。控制台时刻帮我们监控着系统的各种状态。2.服务器稳定。不会出现异常的关机,掉线等。3.阿里云服务器非常安全。做web开发最怕的当然是攻击,阿里云的服务器,是值得信赖的。4.非常省钱。这是最重要的一点,尤其对于我们学生用户还是很友好的。通过这段时间的学习,我也大致了解了云服务器的基本使用方法,学习了不少Linux的指令。在这里我也要感谢阿里云的飞天加速计划,让我能够免费学习云服务器的使用。我相信这次体验能让我日后的工作生涯得到极大的提升,也希望我能在阿里云的云服务器领域学到更多的知识。
初次使用云服务器ECS的感受我是在校大二的学生,计算机科学与技术专业。我是通过学长的介绍了解到的“飞天加速计划·高校学生在家实践”活动。也是想先体验一下云服务器的使用,先熟悉一下。然后同时我正在做前后端分离的项目,恰好可以试着把项目部署到云服务器上面。过程中的感受和遇见的问题使用阿里云ECS,要会Linux的基本命令会更好一些,虽然也可以使用宝塔面板的可视化界面,但是我认为还是从一些本质出发去学会一样东西。首先安装了xShell和Xftp远程连接工具,然后进行Linux的基本命令学习后,可以完成一些基本操作。Java环境的配置,最初有点让我不知所措,在Windows上都是可视化的,完成Java环境的还算简单,但是到了Linux上一切皆文件的操作系统上,我不知道怎样配置Java环境,然后通过在网上查询,了解到是在/etc/profile下配置。然后安装了Tomcat,MySQL。启动Tomcat后,就可以在访问Tomcat,第一体验到不是在本地访问。挺高兴的。然后就是把项目部署到上面去,开始的确是部署上去了,但是没有连接数据库,找了很久发现是在连接数据库时,没有把配置文件里的localhost改了。修改成功后,就连接成功了。第一次感受到可以把自己做的项目让所有人都可以看到,高兴坏了。展望使用云服务让我收获很大,特别是在合作方面带来了很大的便利,提高了工作效率。通过这段时间的学习,学会云服务器的基本使用,为以后能够更加的熟练使用打下了基础,同时更加确定没有什么问题解决不了,只是看自己想不想去解决。相信以后会更加熟练的使用,会部署更多的项目在这上面,收获更多。终会有一天我会让所有人都看到我做的网站。加油!
写这篇文章是为了分享一下我最近使用ECS的体验报告,我是广州某高校计算机学院的电子信息专业的一名研二研究生。暑期参与的一个项目是在学校的服务器上跑的,老师说让我部署到一个其他服务器上去,测试做一下网页,然后我的组员就给我推荐了阿里云的服务器,说学生用户可以免费试用。我就登陆了阿里云通过了学生认证,做了几个简单的小任务就领取到了14天的ECS服务器。在领取后,可以得到一个链接,并且自己设置了一个密码,这样我就可以像连接自己学校的服务器一样连接试用了。在安装好了环境之后,将自己之前做的项目文件传输到服务器上。这个步骤需要的时间比较长,传输的速度还是挺慢的。可能服务器离得相对较远,所以这个速度也是正常。在部署好了之后,其他的同学就负责调用我的这个服务器上的代码做网页开发。小型的服务器没有配置GPU的,所以使用起来执行的速度还是要慢一些的。因为阿里服务器使用的人很多,所以遇到了什么问题还是比较能方便地找到答案的。当时网站的开发人员让我再多开一个端口,我一时不知道怎么办。他问,开个端口你会吗?会!研究生怎么能说不会?网上搜了一下,真的很简单,过程也写的很详细。三两下就把这个问题解决了,说配置好了。使用阿里云也必将省心。不需要花时间维修服务器硬件,有阿里监控服务器,也很稳定,不会出现异常关机等掉线状况。阿里云服务器非常安全,不会出现安全问题。能愿意花钱投入资金给我们这些穷学生一个免费使用的机会,也是很良心啦。用了好几天我差点忘了这事情,然后阿里还会发短信提示我服务器要到期了,短信看过之后忘了,工作人员直接打电话联系我。服务还是很贴心的,不然我自己可能记不住时间,万一过期了都不知道。感觉整个流程使用下来,体验还是不错的。如果以后有需要,自己也会选择继续使用阿里云的服务器。以后的工作什么遇到有需要的,阿里云服务器也是一个不错的选择。阿里是一个大公司,对于服务器这方面肯定有充足的经验,这一整套服务也是相应发很完善。给大家一个更低的成本使用服务器,也是让资源充分得到利用。
一、关于NVIDIA TESLA系列GPU详细介绍如下: NVIDIA TESLA V100 NVIDIA Tesla V100采用NVIDIA Volta架构,非常适合为要求极为苛刻的双精度计算工作流程提供加速,并且还是从P100升级的理想路径。该GPU的渲染性能比Tesla P100提升了高达80%,借此可缩短设计周期和上市时间。 Tesla V100的每个GPU均可提供125 teraflops的推理性能,配有8块Tesla V100的单个服务器可实现1 petaflop的计算性能。 正式购买之前,推荐先领取代金券再购买(附代金券领取地址:阿里云官方云小站),可帮助我们进一步降低购买成本。 NVIDIA TESLA P40 The Tesla P40能够提供高达2倍的专业图形性能。Tesla P40能够对组织中每个vGPU虚拟化加速图形和计算(NVIDIA CUDA? 和 OpenCL)工作负载。支持多种行业标准的2U服务器。 Tesla P40可提供出色的推理性能、INT8精度和24GB板载内存。 NVIDIA TESLA T4 NVIDIA Tesla T4的帧缓存高达P4的2倍,性能高达M60的2倍,对于利用NVIDIA Quadro vDWS软件开启高端3D设计和工程工作流程的用户而言,不失为一种理想的解决方案。凭借单插槽、半高外形特性以及低至70瓦的功耗,Tesla T4堪称为每个服务器节点实现最大GPU密度的绝佳之选。 NVIDIA TESLA P4 Tesla P4可加快任何外扩型服务器的运行速度,能效高达CPU的60倍。 正式购买之前,推荐先领取代金券再购买(附代金券领取地址:阿里云官方云小站),可帮助我们进一步降低购买成本。 二、NVIDIA Tesla GPU系列P4、T4、P40以及V100 NVIDIA Tesla系列GPUP4、T4、P40以及V100性能规格参数对比表,阿里云GPU云服务器提供的实例GN4(Nvidia M40)、GN5(Nvidia P100)、GN5i(Nvidia P4)及GN6(Nvidia V100),也会基于NVIDIA Tesla GPU系列。 云服务器 Tesla T4:世界领先的推理加速器 Tesla V100:通用数据中心 GPU 适用于超高效、外扩型服务器的 Tesla P4 适用于推理吞吐量服务器的 Tesla P40 单精度性能 (FP32) 8.1 TFLOPS 14 TFLOPS (PCIe) 15.7 teraflops (SXM2) 5.5 TFLOPS 12 TFLOPS 半精度性能 (FP16) 65 TFLOPS 112 TFLOPS (PCIe)125 TFLOPS (SXM2) — — 整数运算能力 (INT8) 130 TOPS — 22 TOPS* 47 TOPS* 整数运算能力 (INT4) 260 TOPS — — — GPU 显存 16GB 32/16GB HBM2 8GB 24GB 显存带宽 320GB/秒 900GB/秒 192GB/秒 346GB/秒 系统接口/外形规格 PCI Express 半高外形 PCI Express 双插槽全高外形 SXM2/NVLink PCI Express 半高外形 PCI Express 双插槽全高外形 功率 70 W 250 W (PCIe) 300 W (SXM2) 50 W/75 W 250 W 硬件加速视频引擎 1 个解码引擎,2 个编码引擎 — 1 个解码引擎,2 个编码引擎 1 个解码引擎,2 个编码引擎 正式购买之前,推荐先领取代金券再购买(附代金券领取地址:阿里云官方云小站),可帮助我们进一步降低购买成本。
阿里云GPU 云服务器是什么? GPU 云服务器(GPU Cloud Computing,GPU)是提供 GPU 算力的弹性计算服务,提供GPU加速计算能力,实现GPU计算资源的即开即用和弹性伸缩,具有超强的计算能力,服务于深度学习、科学计算、图形可视化、视频处理多种应用场景。阿里云作为亚洲第一的云服务提供商,随时为您提供触手可得的算力,有效缓解计算压力,提升您的业务效率,助您提高企业竞争力。 此次GPU云服务器特惠分为新人专享、计算型GPU、弹性裸金属GPU、轻量级GPU、超级计算集群GPU和含光800 NPU几个板块,每个板块的具体优惠政策及云服务器实例规格、配置、价格信息如下:1、新人专享 gn6v、gn6i、gn5i实例GPU云服务器首购享低至4折限时折扣。正式购买之前,推荐先领取代金券再购买(附代金券领取地址:阿里云官方云小站),可帮助我们进一步降低购买成本。 gup云服务器实例 配置 cpu与内存 性能 活动价格 GPU云服务器gn6v 8核32G V100 GPU,16G单块显存 最高配置8张NVIDIA,16G显存V100计算卡,336G DDR4内存 4572.00/月起、20574.00/6月起、36576.00/年起、73152.00/2年起 GPU云服务器gn6i 4核15G T4 GPU,6G单块显存 最高配置4张NVIDIA 16G显存T4计算卡,372G DDR4内存 2008.80/月起、9039.60/6月起、16070.40/年起、32140.80/2年起 GPU云服务器gn6i 8核31G T4 GPU,6G单块显存 最高配置4张NVIDIA 16G显存T4计算卡,372G DDR4内存 2419.20/月起、10886.40/月起、19353.60/年起、38707.20/2年起 GPU云服务器gn5i 2核8G P4 GPU,8G单块显存 最高配置2张NVIDIA 8G显存P4计算卡,224G DDR4内存 1500.00/月起、6750.00/6月起、12000.00/年起、24000.00/2年起 GPU云服务器gn5i 4核16G P4 GPU,8G单块显存 最高配置2张NVIDIA 8G显存P4计算卡,224G DDR4内存 1674.00/月起、7533.00/6月起、13392.00/年起、26784.00/2年起 GPU云服务器gn5i 8核32G P4 GPU,8G单块显存 最高配置2张NVIDIA 8G显存P4计算卡,224G DDR4内存 2016.00/月起、9072.00/6月起、16128.00/年起、32256.00/2年起 2、计算型GPU gn6v、gn6e、gn6i、gn5、gn5i实例GPU云服务器包月6.1折,1年5折,3年4.2折。gup云服务器实例 配置 cpu与内存 性能 活动价格 GPU云服务器gn6v 8核32G V100 GPU,16G单块显存 最高配置8张NVIDIA 16G显存V100计算卡,336G DDR4内存 4682.90/月起、28024.62/6月起、45942.00/年起、115739.06/3年起 GPU云服务器gn6e 12核92G V100 GPU,32G单块显存 最高配置8张NVIDIA 32G显存V100计算卡,736G DDR4内存 5816.75/月起、34813.92/6月起、57072.00/年起、143821.44/月起 GPU云服务器gn6i 8核31G T4 GPU,16G单块显存 最高配置4张NVIDIA 16G显存T4计算卡,372G DDR4内存 4143.00/月起、21870.00/6月起、48624.00/年起、145872.00/3年起 GPU云服务器gn5 4核30G P100 GPU,16G单块显存 最高配置8张NVIDIA 16G显存P100计算卡,高性能NVMe SSD本地盘 3792.00/月起、22128.00/6月起、44256.00/年起、132768.00/3年起 GPU云服务器gn5i 4核16G P4 GPU,8G单块显存 最高配置2张NVIDIA 8G显存P4计算卡,224G DDR4内存 2901.00/月起、16860.00/6月起、33720.00/年起、100692.00/3年起 正式购买之前,推荐先领取代金券再购买(附代金券领取地址:阿里云官方云小站),可帮助我们进一步降低购买成本。 3、弹性裸金属GPU ebmgn7、ebmgn6i、ebmgn6v、ebmgn6e实例GPU云服务器特惠。gup云服务器实例 配置 cpu与内存 性能 活动价格 GPU云服务器ebmgn7 104核768G A100 GPU,320GB显存 配置8张NVIDIA 40G显存A100计算卡,768G DDR4内存 121358.00/月起、727860.00/6月起、1455720.00/年起、4367160.00/3年起 GPU云服务器ebmgn6i 96核384G T4 GPU,64G单块显存 配置4张NVIDIA 16G显存T4计算卡,384G DDR4内存 17923.00/月起、107016.00/6月起、214032.00/年起、642096.00/3年起 GPU云服务器ebmgn6v 96核384G V100 GPU,128G显存 配置8张NVIDIA 16G显存V100计算卡,384G DDR4内存 68403.00/月起、409872.00/6月起、819744.00/年起、2458764.00/3年起 GPU云服务器ebmgn6e 96核768G V100 GPU,256G显存 配置8张NVIDIA 32G显存V100计算卡,768G DDR4内存 68323.00/月起、409416.00/6月起、818707.20/年起、2456496.00/3年起 正式购买之前,推荐先领取代金券再购买(附代金券领取地址:阿里云官方云小站),可帮助我们进一步降低购买成本。 阿里云GPU云服务器特惠 官方活动详情地址:点此进入阿里云GPU云服务器特惠3折起活动 正式购买之前,推荐先领取代金券再购买(附代金券领取地址:阿里云官方云小站),可帮助我们进一步降低购买成本。 4、轻量级GPU vgn6i、vgn5i实例GPU云服务器特惠。gup云服务器实例 配置 cpu与内存 性能 活动价格 GPU云服务器vgn6i 4核23G T4 GPU,4G显存 分片虚拟化GPU,计算能力支持T4的1/4和1/2,GPU显存支持4GB和8GB 1284.65/月起、7083.88/6月起、7161.88/6月起、42971.26/3年起 GPU云服务器vgn5i 4核12G P4 GPU,1G显存 分片虚拟化GPU,计算能力支持P4的1/8、1/4、1/2和1:1,GPU显存支持1GB、2GB、4GB和8GB 1236.00/月起、6792.00/6月起、13584.00/年起、41220.00/3年起 5、超级计算集群GPU sccgn6实例GPU云服务器特惠。gup云服务器实例 配置 cpu与内存 性能 活动价格 GPU云服务器sccgn6 96核384G V100 GPU,16G显存 GPU计算型超级计算集群实例规格族sccgn6 71655.00/月起、429384.00/6月起、858768.00/年起、2576304.00/3年起 正式购买之前,推荐先领取代金券再购买(附代金券领取地址:阿里云官方云小站),可帮助我们进一步降低购买成本。 6、含光800 NPU NPU云服务器ebman1实例云服务器特惠。gup云服务器实例 配置 cpu与内存 性能 活动价格 NPU云服务器ebman1 96核384G 含光800加速器,X-Dragon架构 自研深度神经网络加速器含光800(AliNPU) 45803.31/月起、274195.85/6月起、548547.70/年起、1645175.09/3年起 正式购买之前,推荐先领取代金券再购买(附代金券领取地址:阿里云官方云小站),可帮助我们进一步降低购买成本。
背景介绍:2017年1月份,Google将Chrome 56中所有的 http站点标记为不安全,并对所有使用http方式的登录交互页发出醒目的“不安全”提示。 Apple自2015年WWDC大会开始,就在计划逐步推进实施ATS(App与后台服务器通讯强制使用https通讯)的实施,并在2017年WWDC大会上发布明确的时间节点,使https服务成为所有iOS及MAC上App的标配。 随着一些国际主流CA机构免费型DV SSL证书产品的出现,SSL/TLS证书的应用越来越广泛。SSL证书与域名一样,很快会成为每一个互联网站点不可或缺的基础服务要素。SSL/TLS证书的应用逐渐普及,越来越多的站点正在加速启用全站https服务。而在浏览器方面,Chrome及Firefox在所有新发布的浏览器版本中支持HSTS。已经有相当一部分站点启用了HSTS服务,彻底将http服务从支持的选项列表中移除。 如何保障SSL/TLS证书的安全及可靠? 全面的推广和应用SSL/TLS,会给站点安全性带来质的提升,彻底杜绝中间人攻击、网络劫持等攻击行为。但于此同时,考虑全站https之后的高可用保障时,SSL/TLS证书的安全性问题就逐步凸显出来。 如何确保https服务能够7*24不间断服务,不仅是企业内部IT运营团队需要考虑的问题,同时也对第三方CA服务商提出了更高的要求。 一旦第三方CA服务商出现运营或安全事故,将导致CA服务商的认证服务不可用。这将直接影响到使用企业IT服务的最终用户。无论是PC客户端、移动终端,还是API接口程序,都将有可能因此受到冲击,导致服务不可用。 因此在进行站点高保障安全运营维护工作的同时,要求SSL/TLS服务供应商也必须确保提供7*24不间断的高可用性服务,才能保障服务的可靠性。 SSL/TLS证书服务需注意这三点: 比起单纯的采用一张SSL/TLS证书,要确保高可用性保障的服务站点不受一家第三方CA认证机构的安全或运营事故牵连,同时使用两家不同的CA机构提供的高可用性SSL/TLS证书服务就显得尤为必要了。 无论是选择一张SSL/TLS证书服务,还是采用双证书方案同时使用两张SSL/TLS证书,都需要首先考察CA服务机构在服务保障上的工作是否有做足功课。 首先,CA机构在体量上,当然是越大越好。选择全球排名靠前的几家大型老牌CA机构的产品,能够确保CA机构的产品有更深厚的技术积累和安全保障。不会因为黑客组织或个人的攻击行为、系统安全系统漏洞、认证不规范等各种原因导致服务中断或被其他机构列入信任黑名单。 其次,CA服务商在此之前是否发生过大的安全或运营事故,是否遭受过严厉惩罚措施也是需要预先考察的。在事故发生后,CA服务商能否协调各方快速及时处理,并保障最小限度的影响客户的这种能力,也会给客户的证书应用保障加分。 最后,CA服务商在国内是否有服务加速。 证书签发后,在证书的使用过程中,通常还需要客户端请求CA系统获取证书有效性验证信息。证书的有效性验证,主要采用两种方式:OCSP及CRL。OCSP的验证数据包体积较小,但对应答的及时性有要求。服务器延时越小,客户端验证速度越快。 CRL的验证数据包体积较大,但支持CRL支持缓存。可通过CA服务商的CDN加速服务网络分发。因此要求CA服务商在国内使用CDN加速服务也是很有必要的。 以下方案,主证书采用Digicert(原Symantec)品牌,备份证书采用Entrust或GlobalSign品牌。 如何部署实施高可用性双证书? 1.单证书在线单证书在线方案实施起来非常简单,也很好理解其运行模式。主证书部署在服务器上,备份证书在主证书正常运行期间并不需要安装部署。一旦发生CA服务商安全或运营事故的情况,可通过手动更新配置启用备份证书并下线主证书,或通过自动化部署脚本自动切换到备份证书服务上。 主证书可按照应用需求,购买单域名、增强验证型带绿色地址栏的EV型、多域名或通配符等类型的证书。主证书的注册申请、维护和安装仍然使用原有的模式,不改变部署安装习惯。 备份证书推荐采用多域名,或通配符证书。只需要确保备份证书能够快速覆盖主证书的服务范围,通常不需要频繁的变更或重新注册申请。并且在需要应急启用时,能够快速变更替换主证书对应的服务。 2.源站服务器使用主证书,CDN、高防、WAF等服务使用备份证书 使用CDN、高防或WAF服务的用户,可在源站服务器上安装使用主证书,在CDN、高防、WAF等服务中使用备证书。 通常这类服务还可能委托给第三方CDN服务商来部署实施,所以这种模式下使用双证书方案时,选择两个不同的CA服务商提供的产品不仅能够规避CA运营或安全封信问题,同时源站与CDN、高防、WAF服务上配置的证书使用的证书密钥对也是不同的。任何一个证书出现的运营安全故障(如秘钥丢失、秘钥泄密)都可以快速定位责任主体。第三方CDN服务商的秘钥泄露也不会影响到源站的数据传输安全。 3.主备证书同时在线 成功案例解析 由于Chrome的bug导致所有2016年6月1号之后签发的证书,在Chrome 53、54下报证书透明度日志不可用错误(CT Log),某互联网头部企业启用了Digicert(原Symantec)+ GlobalSign 双证书方案。针对IE、Firefox等浏览器,自动使用Digicert(原Symantec)证书,所有版本的Chrome浏览器访问,则自动启用GlobalSign证书。一些超大型网站或应用,往往对SSL/TLS证书的兼容性有着非常严苛的要求,部分通过API接口对接的服务型产品,更对CA服务商的产品有着更高的兼容性要求。主证书使用大牌CA厂商的证书产品,往往能够获得最优的兼容性支持。但当遇到特定应用场景下的不兼容时,使用双证书应用解决方案,可以有效的规避超大型站点在客户端出现的SSL/TLS证书兼容性故障,同时确保API接入用户不会受到证书变更造成的不良影响。 通常,使用双证书同时在线的方案,需要使用到前端代理服务器通过http代理,UserAgent的识别,Proxy的https重定向来实现这一目标。 以下以Nginx的代理配置来简单介绍: 要实现根据用户 UA,自动重定向到策略指定的SSL/TLS证书服务站点上,首先要求后端必须有多台服务器负责处理https请求,并且在这些站点中分别部署主备两张不同的证书。其次,站点必须关闭HSTS,以避免客户端浏览器直接通过https方式访问服务器。用户必须是以默认的http服务访问服务器,然后由服务端的Proxy代理进行策略负载。其配置原理如下: if ( condition ){ do_something } if ( $http_user_agent = "wget" ){ do_something } if ( $http_user_agent ~ MSIE ){ do_something else; } 首先,配置好后端服务器策略,为不同的服务器群集配置其专用的证书 ######配置IE浏览器后台服务器群集,并在群集服务器上配置Symantec证书 upstream msiebackend { server 192.168.1.1; server 192.168.1.2; server 192.168.1.3; } ######配置Chrome浏览器后台服务器群集,并在群集服务器上配置GlobalSign证书 upstream chromebackend { server 192.168.1.4; server 192.168.1.5; server 192.168.1.6; } ######配置Firefox浏览器后台服务器群集,并在群集服务器上配置Symantec或其他证书 upstream mozillabackend { server 192.168.1.7; server 192.168.1.8; server 192.168.1.9; } 最后,配置Porxy策略,将不同User Agent标识的客户端浏览器导向到特定的后台服务器上。示例如下: server { access_log logs/access.log; error_log logs/error.log; listen 80 default; server_name baidu.com www.baidu.com; ## 代理转发站点的域名 location / { proxy_pass https://msiebackend; ## 默认使用Symantec证书 if ($http_user_agent ~ Chrome ) { proxy_pass https://chromebackend; ## 为Chrome浏览器启用GlobalSign证书 } if ($http_user_agent ~ Mozilla ) { proxy_pass https://mozillabackend; ## 为Firefox 浏览器启用Symantec或其他证书 } proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; ...s } 完成以上配置后,重启Nginx,用不同浏览器客户端尝试访问您的站点,测试证书的部署策略是否生效。如果再深入细致的对User Agent进行策略定制,将可以更细致的控制客户端的访问代理。END
2020浪潮汹涌,星火明灭,一只看不见的巨兽,阻挡在所有逐梦人的面前,OB人不问坎坷,只追星辰,执炬逆风蹒行,仗笔奋抒答卷。 OB的小成绩 蚂蚁集团科技战略提速,OceanBase 独立成公司 6月1日,蚂蚁集团正式宣布将自研数据库产品 OceanBase 独立进行公司化运作,成立由蚂蚁 100% 控股的数据库公司北京奥星贝斯科技有限公司,并由蚂蚁集团 CEO 胡晓明亲自担任董事长。此举标志着 OceanBase 将走上大规模商业化的轨道。OceanBase 立志在未来三年内服务全球超过上万家企业级客户。 OB君:从这一刻起,我们宛如新生~诞生于儿童节的 OB 公司,像孩子般怀揣着梦想开始出发。 OceanBase 二度荣登 TPC-C 性能榜首 5月20日,被誉为数据库领域“世界杯”的 TPC-C 公布最新榜单, OceanBase 打破去年自己保持的世界纪录,获得7.07亿 tpmC 的超高性能得分,较去年大幅提升11倍。再次刷新世界纪录,OceanBase 用了7个月,而上一次这个时间是9年。OceanBase 的这一突破将性能分数从千万级,提升至亿级。 OB君:不念往昔辉煌,才能再创今日荣耀! 加速商业化进程,助力更多行业客户实现数字化转 2020年 OceanBase 在商业化进程中捷报连连,越来越多的客户通过我们实现数字化转型。截止目前, OceanBase 已经在工商银行、建设银行、南京银行、人保健康险、西安银行、天津银行、苏州银行、东莞银行、常熟农商行、广东农信、中国人保、招商证券、中石化、深圳公积金、山东移动、浙江移动等众多行业机构上线。随着商用化程度的不断加深,在交通、铁路、航天等领域,也都出现了 OceanBase 的身影。 OB君:持续为全行业客户注入分布式的原力,将普惠的科技红利送到千家万户。 积极适配行业主流应用,商业生态持续蓄力 面向产业生态,OceanBase 积极拥抱全产业链生态,已经与多家硬件、软件厂商完成了产品适配、互认。OceanBase 在商业生态方面持续蓄力,已深入到各行各业,形成联合解决方案。目前,OceanBase 已经与40多家 ISV 深入合作,其中包括恒生电子、神州信息、润和软件、先进数通、易诚互动、久远银海、神玥伟奥等。 OB君:信任是最大的嘉奖,我们定不负众望,与伙伴们携手创赢未来。 持续建设人才生态,立志三年培养五万个分布式数据库人才 继9月份 OceanBase 推出初级认证OBCA,上线短短2个多月已有4000+人完成认证。近日,中级认证 OBCP 已上线官网。9月26日,华东师范大学与 OceanBase 签署战略合作,共建“华东师范大学-北京奥星贝斯分布式数据库联合实验室”。未来,OceanBase 还会与更多高校产生连接,培养更多分布式数据库的专业人才。 OB君:数据库的未来属于分布式,你愿意与我们共创未来吗? OceanBase 发布1+4产品平台整合解决方案和全新一体机 为了满足市场需求,便于用户操作,OceanBase 在2020年云栖大会上正式推出1+4完整的产品平台整合解决方案。OceanBase 2.2版本的5大特性全新亮相,具有混合负载引擎和多种容灾方式,兼顾业务效率与数据安全。此外,OceanBase 发布了全新数据库一体机产品,可以实现软硬件一站式自动化快速交付部署,支持联机并柜和异地多机房扩容,带来性能的线性增长,同时采用自研国密卡+ TPCM 可信认证,安全可靠。 OB君:一次次的产品迭代,一次次的技术革新,是为了助力更多客户实现业务增长。 星光不问赶路人,时光不负有心人,2020渐远,2021可期,新的故事,正在酝酿。
阿里云对象存储OSS可以开启传输加速功能,那么OSS传输加速和CDN有什么区别么?事实上OSS传输加速原理和CDN有本质上的区别,来详细说下阿里云对象存储OSS传输加速和阿里云CDN的区别: 阿里云OSS传输加速和CDN区别 阿里云对象存储OSS传输加速功能与CDN加速有本质区别,阿里云CDN是利用边缘节点缓存进行加速的;而OSS传输加速是对互联网传输链路和协议策略进行优化,将远距离传输变成短距离传输,优化了传输链路与协议栈。 阿里云对象存储OSS传输加速实现OSS文件上传和下载加速,并且对非热点文件、静态或动态更新的文件下载,都可以实现加速。 阿里云OSS传输加速是需要另外付费的,与阿里云其他产品相同,传输加速功能也是有两种计费模式:包年包月和按量计费,默认开通OSS传输加速功能后,是按照按量计费的方式来支付费用的,按量计费是根据用户实际使用的流量费用,然后乘以单价,一般阿里云大陆地域的OSS传输加速费用是0.5元/GB。包年包月方式也很好理解,通过购买传输加速包来抵扣实际产生的传输加速费用,一般中国大陆地域的传输加速包100GB优惠价是38.40元,1TB优惠价348.00元。 以上是对阿里云对象存储OSS和CDN区别理解,请以官方文档为准。
在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用。Nacos既可以做配置中心,也可以做注册中心。我们先来看看在项目中如何使用Nacos做配置中心。 Nacos配置中心 在项目中使用Nacos做配置中心还是比较简单的,我们先创建SpringBoot项目,然后引入nacos-config的jar包,具体如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-config&lt;/artifactId&gt; </dependency> 如果你不想使用SpringBoot默认的nacos-config版本,也可以指定版本号。 首先,我们进入到nacos的管理后台,第一步要创建命名空间,如图: 我们创建了user的服务配置,以后user相关的微服务都在这个命名空间中拉取配置。我们点击保存,命名空间的id会自动生成,这个id是十分重要的,我们要在项目中配置这个id。命名空间创建好以后,我们再创建配置文件, 在配置列表中,我们先选中刚才新建的命名空间:user服务配置。然后再点击新建,我的截图中已经把user-provider的配置文件创建好了。我们可以看一下如何新建,如图: 其中Data ID我们叫做user-provider,group我们用来区分本地环境、测试环境、生产环境。配置格式我们选择yaml,内容我们先配置一个username看看能不能生效。 然后在resources目录下创建bootstrap.yml,这个bootstrap.yml和application.yml是不一样的,它优先加载于application.yml,大家一定要注意他们的区别。我们要在bootstrap.yml文件中,要配置nacos的地址、命名空间、文件名等信息,具体如下: spring: cloud: nacos: server-addr: nacos-host:80 config: file-extension: yml name: user-provider group: ${spring.profiles.active} namespace: e5aebd28-1c15-4991-a36e-0865bb5af930</code></code></pre> application: name: user-provider</code></pre> spring.application.name,这个不用说了,就是你应用的名称,我们叫做user-provider,用户服务的提供者。再看上面的部分server-addr,这个是nacos的地址,我们配置为nacos-host:80。其中nacos-host需要配置host,指向nacos的ip,而端口80也是需要指定的,如果不指定端口,会默认8848端口。再看config的部分,file-extension,文件的扩展名,这里我们使用yml,相应的,在nacos配置中心中,配置格式选择yaml。config.name对应着nacos管理后台的Data ID。group,在这里是分组,我们用作区分不同环境的标识,通过项目启动时传入的参数${spring.profiles.active}获得。namespace,命名空间,这里要填写命名空间的id,这个id在nacos后台中获取。这里我们填写的是user配置服务的命名空间id。到这里,在项目中使用nacos做配置中心就搭建好了。我们在项目当中写个属性类,测试一下,看看能不能取到值。 @RefreshScope@Setter@Getter@Configurationpublic class DatabaseConfig { @Value("${username}")private String username;@Value("${server.port}")private String port; } 我们写了个DatabaseConfig类,先注意一下类上面的注解,@RefreshScope这个注解可以使我们在nacos管理后台修改配置以后,项目不用重启,就可以更改变量的值。@Setter@Getter这个是Lombok的注解,可以省去setget方法。@Configuration标识这个类是一个配置类,项目启动时会实例化。在类里边,我们定义了两个变量,username和port,两个变量上面的注解@Value,可以取到对应的,属性的值。${username}这个我们在nacos管理后台已经设置了,${server.port}这个我们可以通过项目启动参数获取到,一会带着大家试一下。我们在写个controller,把变量的值打印出来,如下: @RestController@RequestMapping("user")public class UserController { @Autowiredprivate DatabaseConfig databaseConfig; @RequestMapping("config")public String config() { return databaseConfig.getUsername()+":"+databaseConfig.getPort(); } } 我们将username和port两个变量打印出来。好了,程序相关的部分就都写好了,然后,我们添加项目启动参数,如图: spring.profiles.active=local,这个参数很重要,项目要用这个local值去nacos管理后台找对应的分组group是local的配置。server.port=8080,这个是项目的启动端口,同时,我们也将这个值打印出来了。好了,我们现在启动项目,并且在浏览器中访问我们刚才写的controller,浏览器返回的结果如下: user:8080 user,是我们在nacos中配置的值,8080是我们添加的启动参数。返回结果没有问题。然后我们再去nacos管理后台将user改成tom,项目不重启,再看看返回的结果,如图: 确认发布以后,我们刷新一下浏览器, tom:8080 我们并没有重启项目,但是返回的结果变成了tom。怎么样?使用nacos做配置中心还是比较好用的吧~ Nacos注册中心 通常情况下,我们一般会选择Zookeeper、Eureka做注册中心,其实Nacos也是可以做注册中心的。既然我们项目使用了Nacos做配置中心,那么使用Nacos做注册中心也是非常好的选择。下面让我们看看在项目中如何使用Nacos做注册中心。 首先,还是在项目中引入Nacos注册中心的jar包,如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-discovery&lt;/artifactId&gt; </dependency> 我们引入了nacos-discovery的jar包,如果您不想使用默认的版本,可以指定需要引入的版本。 然后,我们就要配置Nacos注册中心的地址了,通常情况下,我们是在application.yml文件中进行配置。但是,这次我们使用了Nacos做配置中心,就可以在Nacos的管理后台进行配置了,如下: username: tomspring: cloud: nacos: discovery: server-addr: nacos-host:80 namespace: e5aebd28-1c15-4991-a36e-0865bb5af930 group: ${spring.profiles.active}&lt;/code&gt;&lt;/pre&gt;</code></code></code></pre> 我们需要在nacos.discovery节点下进行配置,server-addr,这个属性和前面的配置是一样的,nacos-host是配置了HOST,指向Nacos的ip,80端口也是需要指定的,默认端口是8848。namespace,命名空间,我们复用前面的就可以了。group,同样,我们用来区分不同的环境,它的值也是从启动参数中获取。最后,我们在项目的启动类中添加@EnableDiscoveryClient的注解,如下: @SpringBootApplication@EnableDiscoveryClientpublic class UserProviderApplication { public static void main(String[] args) { SpringApplication.run(UserProviderApplication.class, args); } } 好了,到这里,服务提供者的配置以及代码上的改动都调整完毕了,我们启动一下项目,然后去Nacos管理后台看看服务是否已经注册到Nacos当中。 我们在Nacos管理后台选择服务列表菜单,可以看到我们启动的项目已经注册到nacos中了。如果我们再启动一个服务提供者会是什么样子呢?我们刚启动的项目指定的端口是8080,我们再启动一个项目,将端口指定为8081,看看服务列表是什么样子。 我们看到实例数由原来的1变为了2。说明我们的user-provider服务有了两个,我们再点右边的详情看一下, 服务的详情以及具体的实例都给我们列了出来,我们还可以编辑和下线具体的实例,这个我们后面再介绍。 好了,到这里,服务提供者的就搭建好了,我们分别访问两个服务提供者的具体连接得到的结果如下: # http://localhost:8080/user/configtom:8080 http://localhost:8081/user/config tom:8081 接下来,我们再看看服务的消费者如何搭建。我们新建一个SpringBoot项目user-consumer,这个项目我们同样使用Nacos作为配置中心,而且要从Nacos这个注册中心获取服务列表,所以引入jar包如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-config&lt;/artifactId&gt; </dependency><dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-discovery&lt;/artifactId&gt; </dependency> 然后在bootstrap.yml中,填写nacos配置中心的相关配置,这个和前面的配置的差不多的,只需要改一下相应的文件名称就可以了。 spring: cloud: nacos: server-addr: nacos-host:80 config: file-extension: yml name: user-consumer group: ${spring.profiles.active} namespace: e5aebd28-1c15-4991-a36e-0865bb5af930</code></code></code></code></pre> application: name: user-consumer</code></pre> 注意config.name,我们改为了user-consumer。并且应用的名称改为了user-consumer。然后,我们再去Nacos管理后台添加user-consumer的配置,如图: DataID就是我们配置的user-consumer,group我们同样配置为local,标识着本地。具体的配置内容是nacos服务的地址,如图。这样我们的服务消费者项目user-consumer就可以从nacos配置中心获取到注册中心的地址和命名空间,并且可以从命名空间获取服务的地址。配置的部分就到这里了,然后再去启动类中,添加@EnableDiscoveryClient注解,如下: @SpringBootApplication@EnableDiscoveryClientpublic class UserConsumerApplication { public static void main(String[] args) { SpringApplication.run(UserConsumerApplication.class, args); } } 最后,我们写个Controller,从Nacos获取服务提供者的地址,并调用服务提供者,如下: @RestController@RequestMapping("user")public class UserController { @Autowiredprivate LoadBalancerClient loadBalancerClient; @RequestMapping("consumer")public String consumer() { ServiceInstance provider = loadBalancerClient.choose("user-provider"); String url = "http://"+provider.getHost()+":"+provider.getPort()+"/user/config"; RestTemplate restTemp = new RestTemplate(); String result = restTemp.getForObject(url, String.class); return result; } } 这个是SpringCloud Alibaba官网给出的调用示例,使用的是LoadBalancerClient,我们先将其注入。在方法里边,我们调用choose方法,选择user-provider服务,这个是我们服务提供者的名称,在nacos管理后台的服务列表中可以查看到的,这个方法会返回具体的服务实例,我们的服务实例有2个,分别是8080端口和8081端口的两个服务,在这里,默认是轮询的负载均衡策略。选择了具体的服务实例,我们就来拼装请求地址,从服务实例中获取地址和端口。最后使用RestTemplate完成调用。最后,我们配置项目启动,设置spring.profiles.active=local,并且指定端口为9090,如图: 最后,我们启动项目,访问http://localhost:9090/user/consumer,访问结果如下: tom:8080 很明显,我们调用到了8080端口的服务提供者,我们再刷新一下,看看返回结果, tom:8081 这次又调用到了8081端口的服务提供者,我们多次刷新,发现它会在8080和8081之间切换,这说明我们的负载均衡策略应该是轮询。 使用Feign完成服务的调用 上面的例子中,我们使用的是LoadBalancerClient完成服务的调用,接下来,我们分别看看Feign和Ribbon怎么调用服务。我们先来看看Feign,要使用Feign完成服务的调用,先要引入Feign的jar包,如下: <dependency> &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-openfeign&lt;/artifactId&gt;&lt;version&gt;2.2.2.RELEASE&lt;/version&gt; </dependency> 然后再启动类上添加@EnableFeignClients的注解,如下: @SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class UserConsumerApplication { public static void main(String[] args) { SpringApplication.run(UserConsumerApplication.class, args); } } 接下来,我们写一个interface来完成feign的服务调用和熔断,如下: @FeignClient(name = "user-provider",fallback = UserServiceFallback.class)public interface UserService { @RequestMapping("/user/config")String config(); } 我们写了一个UserService的接口,在接口上添加@FeignClient的注解,注解里有两个属性,name指定服务的名称,这里我们指定为user-provider,这是我们前面服务提供者的名称,fallback指定发生熔断时,调用的类。当我们的服务提供者不能正常提供服务时,就会触发熔断机制,会调用熔断服务类的逻辑,返回结果。在接口中,我们写了一个config()方法,方法上添加@RequestMapping的注解,并配置具体的路径。这样,我们在调用服务的时候,通过Feign调用到具体的服务提供者了。我们再来看看熔断实现类UserServiceFallback的具体内容,如下: @Servicepublic class UserServiceFallback implements UserService { @Overridepublic String config() { return "user-fallback"; } } 首先,它是UserService接口,也就是Feign接口的实现类,然后实现接口中的方法,我们直接返回user-fallback字符串。Feign的接口和熔断的实现类都写好了,但是这还不算完,要使熔断生效,还要添加额外的配置,我们直接去nacos管理后台去配置,进入到user-consumer的配置中,添加如下配置: feign: hystrix: enabled: true</code></pre> 这个就是feign的熔断开关,默认是关闭的,现在打开。最后,我们在controller中,调用UserService接口,如下: @Autowiredprivate UserService userService; @RequestMapping("consumer-feign")public String userService() { String result = userService.config(); return result; } 将UserService,注入进来,然后直接调用方法即可。我们访问一下http://localhost:9090/user/consumer-feign,看看返回的结果。如下: tom:8080tom:8081 返回的结果和前面是一样的,我们不断的刷新,它也会在8080和8081之间轮询。 使用Ribbon完成服务的调用 同样,我们也可以使用Ribbon完成服务的调用,Ribbon和RestTemplate在内部是紧密结合的。我们只需要将RestTemplate实例化,并添加@LoadBalanced注解就可以了,如下: @Bean@LoadBalancedpublic RestTemplate restTemplate(){ return new RestTemplate(); } 然后在,controller中,我们使用这个实例化好的RestTemplate,就可以了,具体实现如下: @Autowiredprivate RestTemplate restTemplate; @RequestMapping("consumer-ribbon")public String consumerribbon() { String url = "http://user-provider/user/config";String result = restTemplate.getForObject(url, String.class); return result; } 我们将restTemplate注入进来。在具体方法中,url的地址,我们直接写服务名称user-provider加路径的方式,大家可以参照第一种调用方式,看看区别。我们重启项目,访问http://localhost:9090/user/consumer-ribbon,结果如下: tom:8080tom:8081 返回的结果和前面是一样的,我们不断的刷新,它也会在8080和8081之间轮询。 使用Nacos权重负载均衡 三种服务的调用方法都给大家介绍完了,但是,他们的负载均衡策略都是轮询,这有点不符合我们的要求,我们进入到Nacos的管理后台,调节一下服务的权重,如图: 我们将8080接口的服务权重由1改为10,点击确认,再多次刷新一下我们的访问地址,发现服务的调用还是在8080和8081之间轮询。这是什么情况?这里就不和大家卖关子了,这是因为LoadBalancerClient、Feign和Ribbon3种方式,它们的底层都是使用Ribbon做负载均衡的,而Ribbon负载均衡默认使用的策略是ZoneAvoidanceRule,我们要修改Ribbon的默认策略,让它使用nacos的权重,那么该如何配置呢? 我们进入到nacos管理后台,修改user-consumer的配置,添加如下配置: user-provider: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule</code></pre> user-provider是我们服务的名称,你配置哪个服务的负载均衡策略,就写哪个服务的名字。后面ribbon.NFLoadBalancerRuleClassName需要配置负载均衡策略的具体实现,这个实现类要实现IRule接口,在这里,我们指定实现类为com.alibaba.cloud.nacos.ribbon.NacosRule。这是nacos的负载均衡规则,它是实现了IRule接口的。我们重启项目,调用我们之前的3个链接,调用哪个效果都是一样的,我们发现返回tom:8080的次数明显增多,说明Nacos服务的权重配置生效了。小伙伴们还可以将权重改成其他的值试一下。这里就不给大家演示了。 总结 Nacos的配置中心和服务注册中心就给大家介绍完了,还是很好用的,这为我们搭建微服务提供了另外一种选择。当然消费端的调用还是首推Feign+hystrix熔断的,功能很强大,小伙伴们在项目中多实践吧~
如果有朋友想要进行直播平台的搭建,想了解搭建中流媒体和CDN都是用来做什么的,那么很好,欢迎你来到小路飞的课堂。本文说一说直播平台搭建开发时流媒体和CDN 的具体工作内容。 一、直播平台搭建开发之流媒体服务器发布 对整个直播平台来说流媒体发布这一环节是极其重要的,主要是因为最终面向终端用户服务的还得是分布在全网的流媒体服务器。流媒体服务器的性能好坏以及稳定性决定了终端播放器端的用户体验效果。 不少技术人员会基于IPTV流媒体服务器的基础来做,当然核心的技术点是一直在进步的。 (1)直播平台搭建中流媒体服务器还是采用C语言实现,技术人员也用PHP和JAVA做过,但是运行效率能低于C语言十倍多,用C语言来实现可以保证运行效率; (2)还将之前的多进程模型改成异步IO模型(不阻塞、数据一步到位,很适合高性能高并发应用),提高流媒体服务器的并发处理性能; (3)支持RTMP、HLS协议; (4)引入hadoop(分布式文件系统)这个分布式结构,这样有利于大规模分布式部署、容错和调度。以上的这些改进对流媒体服务器的整体性能来说有质的飞跃。 二、直播平台搭建开发之CDN内容分发 直播平台搭建开发中CDN内容分发主要指的是,对流媒体数据在全网范围内的多个节点服务器之间进行快速的分发,这样可以给播放端的用户带来更好的直播观看体验。 直播平台搭建开发目前支持的传输协议有:RTMP、HL和HTTP-FLV协议。 移动互联网的加速发展更加带动了直播行业的发展,直播平台搭建节点服务器的建设这一块,基本是依据国内互联网的整体布局,采用中心节点--各省级节点(区域节点)--地市级节点(边缘节点)的三级架构模式,把直播平台主要的用户流量可以先引导边缘节点,然后到区域节点。 直播平台搭建CDN内容分发系统是部署在Linux的服务器上的,这样也是为了保证直播平台运行的稳定性。 直播平台搭建CDN内容分发前期一般会先部署中心节点和各省级节点,保证到每个省会都有一个CDN内容分发点,每个省级节点有多台服务器,以此来组成分发集群。 以上就是在直播平台搭建开发过程中流媒体服务器和CDN内容分发的作用啦。小路飞的分享就到这啦。 声明:以上内容为作者云豹科技原创,未经作者本人同意,禁止转载,否则将追究相关法律责任
使用PolarDB和ECS搭建门户网站 通过使用PolarDB数据库实例以及体验y云服务器安装wordpress搭建个人线上博客。 创建PolarDB数据库账号 首先开通场景实例,一键复制后台登陆地址并通过浏览器无痕模式输入账号密码登录,在 阿里云控制台首页 左侧导航栏,依次单击 产品与服务 > 云数据库PolarDB ,进入 云数据库PolarDB管理控制台 。创建数据库账号在集群列表页面,单击集群ID ,进入集群详情界面;单击左侧导航栏配置与管理 > 账号管理,创建账号;参考说明配置账号信息,然后单击确定。1)数据库账号:输入数据库账号名称,例如:test_user 。2)账号类型:此处选择普通账号。3)密码:设置账号密码,例如:Password1213。4)确认密码:再次输入密码。创建数据库在实例详情页,单击左侧导航栏的数据库管理 ,然后单击创建数据库,参考说明配置数据库信息,然后单击创建。1)数据库(DB)名称:输入数据库名称,例如:pbootcms 。2)支持字符集:默认设为utf8mb4。3)授权账号:选择上一步创建的数据库账号test_user。4)账号类型:默认设置为读写。5)备注说明:非必填。用于备注该数据库的相关信息,便于后续数据库管理,最多支持256个字符。 设置数据库白名单连接数据库需要设置数据库白名单,点击 [集群白名单],然后点击 [设置] 设置数据库集群白名单。在白名单界面将默认的白名单地址127.0.0.1更改为 0.0.0.0/0,然后点击 [确定] 使白名单地址生效。 连接ECS服务器安装LAMP环境 打开mobaXterm输入IP地址通过SSH连接并输入密码登录。LAMP是指运行在Linux下的Apache、MySQL和PHP的环境。在ECS服务器上,执行以下命令安装Apache服务及其扩展包。 yum -y install httpd httpd-manual mod_ssl mod_perl mod_auth_mysql 出现下图情况即下载安装成功PbootCMS是使用PHP语言开发的CMS系统,执行以下命令,安装PHP、MySQL并启动MySQL。 yum -y install php php-mysql gd php-gd gd-devel php-xml php-common php-mbstring php-ldap php-pear php-xmlrpc php-imap wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmyum -y install mysql57-community-release-el7-10.noarch.rpmyum -y install mysql-community-server systemctl start mysqld 搭建门户网站 在ECS服务器上,执行以下命令,安装Git,下载PbootCMS源码文件。 yum -y install gitcd ~ && git clone https://gitee.com/hnaoyun/PbootCMS.git 执行以下命令将安装包拷贝到Apache的wwwroot目录下,修改站点根目录文件权限 cp -r PbootCMS/* /var/www/html/chmod -R a+w /var/www/html 向数据库中导入CMS的初始数据。说明: 在执行命令前,请修改一下三个参数。--数据库连接地址参见集群详情页面下方链接地址板块。--test_user为步骤二中创建的数据库账号。--Password1213步骤二中创建的数据库密码。 sql_file="/var/www/html/static/backup/sql/"$(ls /var/www/html/static/backup/sql/) &&mysql -h数据库连接地址 -utest_user -pPassword1213 -Dpbootcms < $sql_file 修改CMS系统数据库配置(在执行命令前,请根据参数说明替换您的数据库配置) cat > /var/www/html/config/database.php << EOF<?phpreturn array( 'database' =&gt; array( 'type' =&gt; 'mysqli', // 数据库连接驱动类型: mysqli,sqlite,pdo_mysql,pdo_sqlite 'host' =&gt; '数据库连接地址', // PolarDB数据库链接地址 'user' =&gt; 'test_user', // PolarDB数据库的用户名 'passwd' =&gt; 'Password1213', // PolarDB数据库的密码 'port' =&gt; '3306', // 数据库端口 'dbname' =&gt; 'pbootcms' //数据库名称 ) );EOF 返回ECS控制台,在ECS实例列表页面,单击已创建的ECS实例ID链接进入ECS详情页。在左侧导航栏,单击 本实例安全组 ,然后单击安全组的ID链接查看安全组配置,确保安全组开放了80端口访问,否则无法访问已搭建的门户网站。安全组是一种虚拟防火墙,具备状态检测和数据包过滤能力,用于在云端划分安全域。通过配置安全组规则,您可以控制安全组内一台或多台ECS实例的入流量和出流量。执行以下命令重启 Apache服务。 systemctl restart httpd 在浏览器地址栏输入云服务器的公网IP地址,进入门户网站首页。系统后台默认访问路径为http://公网IP地址>/admin.php。默认账号为admin,密码为123456。 访问IP地址可见默认设置的网站,可根据自己需求在后台修改网站模板,到此即wordpress网站搭建成功。
前言 本学期开设了数据库与软件工程课程,但使用自己电脑上的虚拟机开启Centos系统,启动数据库与监听等操作太过繁琐,且较为占用系统资源,若电脑配置不够,可能不支持运行虚拟机与Oracle database服务器端。因此,我想到了通过ECS部署云数据库来进行随时随地的连接。 操作方法 若尚未购买ECS,建议选择深圳地区,共享型或突发型实例来进行环境部署的测试。其它地区的镜像市场可能并没有Oracle11g的镜像。选择完适合自己的实例后,进入镜像选择 若已经拥有了实例,则需要在实例控制台停止实例,然后点击更换操作系统。 之后,点击镜像市场搜索oracle,选择第一个即可。等待镜像导入后,启动实例,远程连接到终端。此镜像启动时会自动开启数据库监听等,因此加载较慢,需要耐心等待。此外,可以在镜像界面查看镜像提供商给予的使用手册使用指南中提示需要更改oracle目录下文件的主机名进入目录 [root@localhost ~]# cd /u01/app/oracle/product/11.2.0/db1/network/admin 然后vi 该目录下的两个文件tnsnames.ora与listener.ora将其中的主机名修改即可主机名可在阿里云实例控制台查看与修改。之后,退出SSH,再通过oracle用户登录,使用命令lsnrctl status可以查看监听状态。 连接Oracle 数据库启动时,并没有设置sys用户密码,此时需要手动设置密码后登录。设置方法点此处之后使用本地主机的SQL软件,如sqldeveloper,建立连接。主机名输入ECS实例的公网ip,端口1521(注意需要去安全组开放端口)SID为"orcl",输入用户名:sys密码:(刚设定的)点击测试,显示成功后即可连接oracle数据库。 总结 我本人在部署oracle数据库时碰了许多壁,自己安装centos图形化界面,然后使用课程实验指导书的方法进行部署失败后,搜索了大量解决方法,无果。之后偶然在镜像市场找到了成品镜像并通过调试成功连接。也算是有所收获。
在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用。Nacos既可以做配置中心,也可以做注册中心。我们先来看看在项目中如何使用Nacos做配置中心。 Nacos配置中心 在项目中使用Nacos做配置中心还是比较简单的,我们先创建SpringBoot项目,然后引入nacos-config的jar包,具体如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-config&lt;/artifactId&gt; </dependency> 如果你不想使用SpringBoot默认的nacos-config版本,也可以指定版本号。 首先,我们进入到nacos的管理后台,第一步要创建命名空间,如图: 我们创建了user的服务配置,以后user相关的微服务都在这个命名空间中拉取配置。我们点击保存,命名空间的id会自动生成,这个id是十分重要的,我们要在项目中配置这个id。命名空间创建好以后,我们再创建配置文件, 在配置列表中,我们先选中刚才新建的命名空间:user服务配置。然后再点击新建,我的截图中已经把user-provider的配置文件创建好了。我们可以看一下如何新建,如图: 其中Data ID我们叫做user-provider,group我们用来区分本地环境、测试环境、生产环境。配置格式我们选择yaml,内容我们先配置一个username看看能不能生效。 然后在resources目录下创建bootstrap.yml,这个bootstrap.yml和application.yml是不一样的,它优先加载于application.yml,大家一定要注意他们的区别。我们要在bootstrap.yml文件中,要配置nacos的地址、命名空间、文件名等信息,具体如下: spring: cloud: nacos: server-addr: nacos-host:80 config: file-extension: yml name: user-provider group: ${spring.profiles.active} namespace: e5aebd28-1c15-4991-a36e-0865bb5af930</code></code></pre> application: name: user-provider</code></pre> spring.application.name,这个不用说了,就是你应用的名称,我们叫做user-provider,用户服务的提供者。再看上面的部分server-addr,这个是nacos的地址,我们配置为nacos-host:80。其中nacos-host需要配置host,指向nacos的ip,而端口80也是需要指定的,如果不指定端口,会默认8848端口。再看config的部分,file-extension,文件的扩展名,这里我们使用yml,相应的,在nacos配置中心中,配置格式选择yaml。config.name对应着nacos管理后台的Data ID。group,在这里是分组,我们用作区分不同环境的标识,通过项目启动时传入的参数${spring.profiles.active}获得。namespace,命名空间,这里要填写命名空间的id,这个id在nacos后台中获取。这里我们填写的是user配置服务的命名空间id。到这里,在项目中使用nacos做配置中心就搭建好了。我们在项目当中写个属性类,测试一下,看看能不能取到值。 @RefreshScope@Setter@Getter@Configurationpublic class DatabaseConfig { @Value("${username}")private String username;@Value("${server.port}")private String port; } 我们写了个DatabaseConfig类,先注意一下类上面的注解,@RefreshScope这个注解可以使我们在nacos管理后台修改配置以后,项目不用重启,就可以更改变量的值。@Setter@Getter这个是Lombok的注解,可以省去setget方法。@Configuration标识这个类是一个配置类,项目启动时会实例化。在类里边,我们定义了两个变量,username和port,两个变量上面的注解@Value,可以取到对应的,属性的值。${username}这个我们在nacos管理后台已经设置了,${server.port}这个我们可以通过项目启动参数获取到,一会带着大家试一下。我们在写个controller,把变量的值打印出来,如下: @RestController@RequestMapping("user")public class UserController { @Autowiredprivate DatabaseConfig databaseConfig; @RequestMapping("config")public String config() { return databaseConfig.getUsername()+":"+databaseConfig.getPort(); } } 我们将username和port两个变量打印出来。好了,程序相关的部分就都写好了,然后,我们添加项目启动参数,如图: spring.profiles.active=local,这个参数很重要,项目要用这个local值去nacos管理后台找对应的分组group是local的配置。server.port=8080,这个是项目的启动端口,同时,我们也将这个值打印出来了。好了,我们现在启动项目,并且在浏览器中访问我们刚才写的controller,浏览器返回的结果如下: user:8080 user,是我们在nacos中配置的值,8080是我们添加的启动参数。返回结果没有问题。然后我们再去nacos管理后台将user改成tom,项目不重启,再看看返回的结果,如图: 确认发布以后,我们刷新一下浏览器, tom:8080 我们并没有重启项目,但是返回的结果变成了tom。怎么样?使用nacos做配置中心还是比较好用的吧~ Nacos注册中心 通常情况下,我们一般会选择Zookeeper、Eureka做注册中心,其实Nacos也是可以做注册中心的。既然我们项目使用了Nacos做配置中心,那么使用Nacos做注册中心也是非常好的选择。下面让我们看看在项目中如何使用Nacos做注册中心。 首先,还是在项目中引入Nacos注册中心的jar包,如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-discovery&lt;/artifactId&gt; </dependency> 我们引入了nacos-discovery的jar包,如果您不想使用默认的版本,可以指定需要引入的版本。 然后,我们就要配置Nacos注册中心的地址了,通常情况下,我们是在application.yml文件中进行配置。但是,这次我们使用了Nacos做配置中心,就可以在Nacos的管理后台进行配置了,如下: username: tomspring: cloud: nacos: discovery: server-addr: nacos-host:80 namespace: e5aebd28-1c15-4991-a36e-0865bb5af930 group: ${spring.profiles.active}&lt;/code&gt;&lt;/pre&gt;</code></code></code></pre> 我们需要在nacos.discovery节点下进行配置,server-addr,这个属性和前面的配置是一样的,nacos-host是配置了HOST,指向Nacos的ip,80端口也是需要指定的,默认端口是8848。namespace,命名空间,我们复用前面的就可以了。group,同样,我们用来区分不同的环境,它的值也是从启动参数中获取。最后,我们在项目的启动类中添加@EnableDiscoveryClient的注解,如下: @SpringBootApplication@EnableDiscoveryClientpublic class UserProviderApplication { public static void main(String[] args) { SpringApplication.run(UserProviderApplication.class, args); } } 好了,到这里,服务提供者的配置以及代码上的改动都调整完毕了,我们启动一下项目,然后去Nacos管理后台看看服务是否已经注册到Nacos当中。 我们在Nacos管理后台选择服务列表菜单,可以看到我们启动的项目已经注册到nacos中了。如果我们再启动一个服务提供者会是什么样子呢?我们刚启动的项目指定的端口是8080,我们再启动一个项目,将端口指定为8081,看看服务列表是什么样子。 我们看到实例数由原来的1变为了2。说明我们的user-provider服务有了两个,我们再点右边的详情看一下, 服务的详情以及具体的实例都给我们列了出来,我们还可以编辑和下线具体的实例,这个我们后面再介绍。 好了,到这里,服务提供者的就搭建好了,我们分别访问两个服务提供者的具体连接得到的结果如下: # http://localhost:8080/user/configtom:8080 http://localhost:8081/user/config tom:8081 接下来,我们再看看服务的消费者如何搭建。我们新建一个SpringBoot项目user-consumer,这个项目我们同样使用Nacos作为配置中心,而且要从Nacos这个注册中心获取服务列表,所以引入jar包如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-config&lt;/artifactId&gt; </dependency><dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-discovery&lt;/artifactId&gt; </dependency> 然后在bootstrap.yml中,填写nacos配置中心的相关配置,这个和前面的配置的差不多的,只需要改一下相应的文件名称就可以了。 spring: cloud: nacos: server-addr: nacos-host:80 config: file-extension: yml name: user-consumer group: ${spring.profiles.active} namespace: e5aebd28-1c15-4991-a36e-0865bb5af930</code></code></code></code></pre> application: name: user-consumer</code></pre> 注意config.name,我们改为了user-consumer。并且应用的名称改为了user-consumer。然后,我们再去Nacos管理后台添加user-consumer的配置,如图: DataID就是我们配置的user-consumer,group我们同样配置为local,标识着本地。具体的配置内容是nacos服务的地址,如图。这样我们的服务消费者项目user-consumer就可以从nacos配置中心获取到注册中心的地址和命名空间,并且可以从命名空间获取服务的地址。配置的部分就到这里了,然后再去启动类中,添加@EnableDiscoveryClient注解,如下: @SpringBootApplication@EnableDiscoveryClientpublic class UserConsumerApplication { public static void main(String[] args) { SpringApplication.run(UserConsumerApplication.class, args); } } 最后,我们写个Controller,从Nacos获取服务提供者的地址,并调用服务提供者,如下: @RestController@RequestMapping("user")public class UserController { @Autowiredprivate LoadBalancerClient loadBalancerClient; @RequestMapping("consumer")public String consumer() { ServiceInstance provider = loadBalancerClient.choose("user-provider"); String url = "http://"+provider.getHost()+":"+provider.getPort()+"/user/config"; RestTemplate restTemp = new RestTemplate(); String result = restTemp.getForObject(url, String.class); return result; } } 这个是SpringCloud Alibaba官网给出的调用示例,使用的是LoadBalancerClient,我们先将其注入。在方法里边,我们调用choose方法,选择user-provider服务,这个是我们服务提供者的名称,在nacos管理后台的服务列表中可以查看到的,这个方法会返回具体的服务实例,我们的服务实例有2个,分别是8080端口和8081端口的两个服务,在这里,默认是轮询的负载均衡策略。选择了具体的服务实例,我们就来拼装请求地址,从服务实例中获取地址和端口。最后使用RestTemplate完成调用。最后,我们配置项目启动,设置spring.profiles.active=local,并且指定端口为9090,如图: 最后,我们启动项目,访问http://localhost:9090/user/consumer,访问结果如下: tom:8080 很明显,我们调用到了8080端口的服务提供者,我们再刷新一下,看看返回结果, tom:8081 这次又调用到了8081端口的服务提供者,我们多次刷新,发现它会在8080和8081之间切换,这说明我们的负载均衡策略应该是轮询。 使用Feign完成服务的调用 上面的例子中,我们使用的是LoadBalancerClient完成服务的调用,接下来,我们分别看看Feign和Ribbon怎么调用服务。我们先来看看Feign,要使用Feign完成服务的调用,先要引入Feign的jar包,如下: <dependency> &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-openfeign&lt;/artifactId&gt;&lt;version&gt;2.2.2.RELEASE&lt;/version&gt; </dependency> 然后再启动类上添加@EnableFeignClients的注解,如下: @SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class UserConsumerApplication { public static void main(String[] args) { SpringApplication.run(UserConsumerApplication.class, args); } } 接下来,我们写一个interface来完成feign的服务调用和熔断,如下: @FeignClient(name = "user-provider",fallback = UserServiceFallback.class)public interface UserService { @RequestMapping("/user/config")String config(); } 我们写了一个UserService的接口,在接口上添加@FeignClient的注解,注解里有两个属性,name指定服务的名称,这里我们指定为user-provider,这是我们前面服务提供者的名称,fallback指定发生熔断时,调用的类。当我们的服务提供者不能正常提供服务时,就会触发熔断机制,会调用熔断服务类的逻辑,返回结果。在接口中,我们写了一个config()方法,方法上添加@RequestMapping的注解,并配置具体的路径。这样,我们在调用服务的时候,通过Feign调用到具体的服务提供者了。我们再来看看熔断实现类UserServiceFallback的具体内容,如下: @Servicepublic class UserServiceFallback implements UserService { @Overridepublic String config() { return "user-fallback"; } } 首先,它是UserService接口,也就是Feign接口的实现类,然后实现接口中的方法,我们直接返回user-fallback字符串。Feign的接口和熔断的实现类都写好了,但是这还不算完,要使熔断生效,还要添加额外的配置,我们直接去nacos管理后台去配置,进入到user-consumer的配置中,添加如下配置: feign: hystrix: enabled: true</code></pre> 这个就是feign的熔断开关,默认是关闭的,现在打开。最后,我们在controller中,调用UserService接口,如下: @Autowiredprivate UserService userService; @RequestMapping("consumer-feign")public String userService() { String result = userService.config(); return result; } 将UserService,注入进来,然后直接调用方法即可。我们访问一下http://localhost:9090/user/consumer-feign,看看返回的结果。如下: tom:8080tom:8081 返回的结果和前面是一样的,我们不断的刷新,它也会在8080和8081之间轮询。 使用Ribbon完成服务的调用 同样,我们也可以使用Ribbon完成服务的调用,Ribbon和RestTemplate在内部是紧密结合的。我们只需要将RestTemplate实例化,并添加@LoadBalanced注解就可以了,如下: @Bean@LoadBalancedpublic RestTemplate restTemplate(){ return new RestTemplate(); } 然后在,controller中,我们使用这个实例化好的RestTemplate,就可以了,具体实现如下: @Autowiredprivate RestTemplate restTemplate; @RequestMapping("consumer-ribbon")public String consumerribbon() { String url = "http://user-provider/user/config";String result = restTemplate.getForObject(url, String.class); return result; } 我们将restTemplate注入进来。在具体方法中,url的地址,我们直接写服务名称user-provider加路径的方式,大家可以参照第一种调用方式,看看区别。我们重启项目,访问http://localhost:9090/user/consumer-ribbon,结果如下: tom:8080tom:8081 返回的结果和前面是一样的,我们不断的刷新,它也会在8080和8081之间轮询。 使用Nacos权重负载均衡 三种服务的调用方法都给大家介绍完了,但是,他们的负载均衡策略都是轮询,这有点不符合我们的要求,我们进入到Nacos的管理后台,调节一下服务的权重,如图: 我们将8080接口的服务权重由1改为10,点击确认,再多次刷新一下我们的访问地址,发现服务的调用还是在8080和8081之间轮询。这是什么情况?这里就不和大家卖关子了,这是因为LoadBalancerClient、Feign和Ribbon3种方式,它们的底层都是使用Ribbon做负载均衡的,而Ribbon负载均衡默认使用的策略是ZoneAvoidanceRule,我们要修改Ribbon的默认策略,让它使用nacos的权重,那么该如何配置呢? 我们进入到nacos管理后台,修改user-consumer的配置,添加如下配置: user-provider: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule</code></pre> user-provider是我们服务的名称,你配置哪个服务的负载均衡策略,就写哪个服务的名字。后面ribbon.NFLoadBalancerRuleClassName需要配置负载均衡策略的具体实现,这个实现类要实现IRule接口,在这里,我们指定实现类为com.alibaba.cloud.nacos.ribbon.NacosRule。这是nacos的负载均衡规则,它是实现了IRule接口的。我们重启项目,调用我们之前的3个链接,调用哪个效果都是一样的,我们发现返回tom:8080的次数明显增多,说明Nacos服务的权重配置生效了。小伙伴们还可以将权重改成其他的值试一下。这里就不给大家演示了。 总结 Nacos的配置中心和服务注册中心就给大家介绍完了,还是很好用的,这为我们搭建微服务提供了另外一种选择。当然消费端的调用还是首推Feign+hystrix熔断的,功能很强大,小伙伴们在项目中多实践吧~
作者 | 淘系-霸剑 在开始正文之前,解释下标题,以免给读者们带来误解。 可靠:一方面是单次执行维度的安全可信,另一方面是多次执行可能带来的内存泄漏等问题。 可信三方:公司内部的其他团队、经过审核的外包开发代码和久经考验的开源社区库(锁定版本)。 相对可靠:具备持续稳定运行的能力,特别注意这里不包括安全相关的考虑。在本文的最后也会扩展介绍一些与安全相关的东西。 什么样的场景有这样的需求? 常见的有: SSR(组件的代码需要在服务端执行) 分布式定时任务系统(内部用户提交的轻量级代码) 规则引擎(匹配条件等的代码) 等等。 在可信三方的条件下使用容器隔离等技术会带来较大的 overhead,影响性能。 要解决哪些问题? 典型问题: 内存泄露(变量隔离) CPU 时间限制(死循环、长时间运行的代码) 外部资源控制 Node.js 的代码执行环境模型 我们都知道 Node.js 是单进程且默认情况下是只有一个 V8 执行线程的,但是这是由什么决定的呢? 从上图中可以看到几个概念,这里先解释一下: isolate :顾名思义就是一个独立的世界。一个 isolate 就是一个独立的 V8 实例,其中包括了内存管理、GC 收集器等等。isolate 和实际的一个 OS Thread 成绑定关系。 context:一个 isolate 并不足以执行你的代码,我们可以看到在 Node.js 中有 global,在浏览器中有 window,context 可以指代它们。实际上 context 就是在一个 isolate 的堆上定义的一个全局对象,并且在一个 isolate 中可以存在很多个 context,它们互相之间可以安全的访问。 具体的方案 从上一节中我们可以根据不同的隔离级别找到不同的方案。 new Function const func = new Function(`console.log('hello')`).bind({}); 这种方式在前端动态加载代码的时候比较常用,优势是速度较快,函数中所操作的局部变量会局限在 func 的作用域中。缺陷比较明显,如果加载的代码中使用 const global = Function('return this')(); 就可以很方便的逃逸出去了 > new Function('const global = Function("return this")(); return {global, a: this};').bind({})(){ global: Object <a href="https://nodejs.org/api/vm.html">global] { global: [Circular], clearInterval: [Function: clearInterval], clearTimeout: [Function: clearTimeout], setInterval: [Function: setInterval], setTimeout: [Function: setTimeout] { [Symbol(util.promisify.custom)]: [Function] }, queueMicrotask: [Function: queueMicrotask], clearImmediate: [Function: clearImmediate], setImmediate: [Function: setImmediate] { [Symbol(util.promisify.custom)]: [Function] } }, a: {}} 这种方案的问题在于寄希望于通过函数的 scope 来做到变量的隔离。 Node.js VM API 文档VM 是一个在 Node.js 0.3.0 出现的模块,相对于new Function 能做到更好的变量(内存)隔离。 const vm = require('vm');const script = new vm.Script('globalVar = "set"');const contexts = <a href="https://nodejs.org/api/worker_threads.html">{}, {}, {}];contexts.forEach((context) => { script.runInNewContext(context);});console.log(contexts);// Prints: [{ globalVar: 'set' }, { globalVar: 'set' }, { globalVar: 'set' }] 从 API 命名中就可以看到,VM 模块可以创建 context ,让代码在非 Node.js Main Context 中执行,避免了类似new Function 的变量逃逸。 缺点在于 context 的创建是一个相对慢的过程,对于需要频繁执行的代码,每次创建 context 对性能的影响比较大。 const vm = require('vm');const suite = new (require('benchmark').Suite);const code = 'var square = n * n;'const fn = new Function('n', code);const script = vm.createScript(code);const n = 5;const contextObj = { n };const context = vm.createContext(contextObj);console.log(process.version);suite.add('vm.runInNewContext', function() { vm.runInNewContext(code, { n });}).add('script.runInNewContext', function() { script.runInNewContext({ n });}).add('script.runInContext', function() { script.runInContext(context);}).add('new Function', function() { fn(n);}).on('cycle', function(event) { console.log(String(event.target));}).on('complete', function() { console.log('Fastest is ' + this.filter('fastest').map('name'));}).run({ 'async': true });/**v14.13.0vm.runInNewContext x 2,332 ops/sec ±2.85% (77 runs sampled)script.runInNewContext x 2,609 ops/sec ±2.84% (86 runs sampled)script.runInContext x 571,992 ops/sec ±0.93% (89 runs sampled)new Function x 826,079,093 ops/sec ±1.61% (81 runs sampled)Fastest is new Function**/ VM 模块在基本的 context 之外还提供了更多的功能,比如timeout 和microtaskMode 的设置。但是这里的控制在最坏的情况下会把 Nodejs MainContext 卡住timeout 时长的时间,导致应用执行出现卡死,依然不是好的方案。 Node.js Worker Threads WorkerThread 是在 Node.js 10.x 出现的模块,它通过创建多个 isolate 做到了多线程执行代码,我们也可以使用它结合 Node.js VM 来做到在 Node.js 进程内最完整的隔离与控制。 缺点在于 Worker Threads 的创建是非常慢的,实际使用时需要常驻,并且主线程与 Worker Threads 之间只能通过 IPC 传递满足 HTML structured clone algorithm 的数据结构。 总结 方案 变量隔离 内存限制 isolated 隔离 执行时间限制 异步操作限制 new Function 部分隔离 ❌ ❌ ❌ ❌ vm ✅ ❌ ❌ ✅ ✅ workerthreads ✅ ✅ ✅ ✅ ✅ 社区中基于 isolate 隔离的实现还有 isolated-vm 等,可以进一步参考。读者如果有更好的思路可以跟笔者探讨交流,非常感谢。 扩展:安全 上述的方案均不能实现面向恶意代码的安全,针对安全方面的要求笔者倾向的是两个级别的方案:可信容器以及 WebAssembly 容器。 可信容器 一类是基于在已有的成熟 VMM,进行裁剪,通过虚拟化技术解决安全隔离性问题,比如 AWS 的 Firecracker。 而另一类则完全不使用虚拟机,以 Google 的 gVisor 以及一些 Unikernel 技术为代表。将虚拟化的边界移到了系统调用层面。 基于容器方案的对性能都或多或少有一定影响,且业务应用开发使用的门槛较高,如果不从 Infra 级别上就支持很难以应用到业务应用开发中。 WebAssembly 容器 这是笔者比较看好的方向,通过将代码编译到 WebAssembly 的方式,WebAssembly 容器既可以限制指令执行速度也可以限制内存、通过 WASI 限制访问外部资源等。缺点是目前没有成熟的方案,V8 对 WebAssembly 的支持主要聚焦在了执行性能上,对管控等还没有更好的支持。
传统环保行业一直存在着诸多问题 比如 重资产、轻研发 重硬件、轻软件 重投资、轻运营 昆仑互联 对这些痛点感同身受 一直积极探索新模式、新业态 寻找数字化方式实现产业变革、创新与融合 近日 阿里云宣布与昆岳互联合作 采用“技术+商业”双涡轮模式 共同打造环保产业互联网平台 “昆岳INECO平台” 助力传统生产制造型企业转型升级 技术上 引入阿里云工业互联网平台与数字工厂 阿里云为昆岳互联提供 云计算、物联网和人工智能的支持 从平台整体功能架构及智慧远程运维落地 采集环保系统的“物料、工艺 设备结构、设备运营 系统排放、系统管理” 等六类数据 驱动生产制造企业、环保服务型企业的数字化升级 建设满足第三方智慧远程运维管理的应用系统 支持环保系统业务管理标准化 共同构建环保产业互联网平台的产业链、价值链 商业上 平台还将依托阿里集团强大生态 构建“1平台+2中心+N应用+N服务”的体系 实现“行业资源协同分工、在线交易全程追溯 平台用户降本增效、数据资产安全保障” 接入工厂和各类服务商,打造生态金融体系 未来 阿里云将携手昆岳INECO环保产业互联网平台 将环保产业与“互联网+”多维度深度融合 推动中国环保产业变革创新发展
前言 本学期开设了数据库与软件工程课程,但使用自己电脑上的虚拟机开启Centos系统,启动数据库与监听等操作太过繁琐,且较为占用系统资源,若电脑配置不够,可能不支持运行虚拟机与Oracle database服务器端。因此,我想到了通过ECS部署云数据库来进行随时随地的连接。 操作方法 若尚未购买ECS,建议选择深圳地区,共享型或突发型实例来进行环境部署的测试。其它地区的镜像市场可能并没有Oracle11g的镜像。选择完适合自己的实例后,进入镜像选择 若已经拥有了实例,则需要在实例控制台停止实例,然后点击更换操作系统。 之后,点击镜像市场搜索oracle,选择第一个即可。等待镜像导入后,启动实例,远程连接到终端。此镜像启动时会自动开启数据库监听等,因此加载较慢,需要耐心等待。此外,可以在镜像界面查看镜像提供商给予的使用手册使用指南中提示需要更改oracle目录下文件的主机名进入目录 [root@localhost ~]# cd /u01/app/oracle/product/11.2.0/db1/network/admin 然后vi 该目录下的两个文件tnsnames.ora与listener.ora将其中的主机名修改即可主机名可在阿里云实例控制台查看与修改。之后,退出SSH,再通过oracle用户登录,使用命令lsnrctl status可以查看监听状态。 连接Oracle 数据库启动时,并没有设置sys用户密码,此时需要手动设置密码后登录。设置方法点此处之后使用本地主机的SQL软件,如sqldeveloper,建立连接。主机名输入ECS实例的公网ip,端口1521(注意需要去安全组开放端口)SID为"orcl",输入用户名:sys密码:(刚设定的)点击测试,显示成功后即可连接oracle数据库。 总结 我本人在部署oracle数据库时碰了许多壁,自己安装centos图形化界面,然后使用课程实验指导书的方法进行部署失败后,搜索了大量解决方法,无果。之后偶然在镜像市场找到了成品镜像并通过调试成功连接。也算是有所收获。
日前,蚂蚁集团数据库公司OceanBase在官网上线了OBCA 认证。OBCA是OceanBase推出的OceanBase数据库专员认证,是对学员掌握OceanBase技术技能水平的全面检验和能力认证。 从OceanBase官网认证页面可以看到,OBCA认证是 OceanBase 体系化认证培训的第一阶段,主要通过线上学习+线下培训+考试,让学员可以合理利用碎片化时间,快速了解 OceanBase 数据库的基础技术架构,掌握基础运维OceanBase的能力。据悉,OceanBase后期将会面向更多的人员推出OBCP(OceanBase 数据库认证专家) 及 OBCE(OceanBase 数据库认证大师)等认证,形成一套完整的学习体系。 有学员体验整个学习认证流程表示,OBCA 认证线上主要通过学习 OceanBase 的发展历程、应用案例、产品架构、核心功能、部署安装等知识,来理解多副本一致性协议、数据可靠及高可用、在线水平扩展、分布式事务等 OceanBase 的重要特性,最后再考试,测试掌握的程度。 OceanBase是蚂蚁集团自主研发的分布式数据库,历经阿里和蚂蚁集团内部不同场景的打磨,已经在支付宝、网商银行等核心系统上顺利运行。今年6月,蚂蚁集团正式将OceanBase独立进行公司化运作,成立北京奥星贝斯科技有限公司。OceanBase作为目前全世界唯一经过大规模金融场景长时间考验的企业级分布式关系数据库,支持完整的ACID特性,并拥有三方面的显著优势:可扩展、强一致、高可用。同时,OceanBase还高度兼容MySQL、Oracle,并具备异地多活等先进技术。 事实上,OceanBase在技术领域不断深耕的同时,也十分注重推动开发者生态的发展。去年,OceanBase就曾在全国四个重点城市举行了以“meet you up”为主题的技术论坛,跟全国技术爱好者探讨分布式数据库的技术话题,输出技术能量。此次上线OBCA认证,旨在帮助开发者尽快融入到OceanBase生态中,由浅入深的学习,一步步成长为OceanBase数据库专家。 OceanBase公司CEO杨冰表示:“我们始终坚定地相信分布式数据库就是未来的主流。OceanBase 有着十余年的专业技术积累,正在不断通过自身实践来加速新的数据库生态的建立,以帮助开发者更好地成长,也帮助DBA实现转型,培养更多的分布式数据库人才。” 截至目前,OceanBase已经在多家金融机构落地应用,包括中国工商银行、南京银行、人保健康险、西安银行、常熟农商行、苏州银行、广东农信等众多银行和保险机构。
北京多来点信息技术有限公司是北京科委、信息产业部认定的高新技术企业,为餐饮企业提供云端闭环SaaS平台。集餐饮CRM、供应链、O2O、POS支付、三方平台于一体的闭环解决方案服务商。服务全国300+城市和新加坡、伦敦等地区的35万家餐饮企业。 业务挑战 企业发展一定阶段需要构建IDC与云上跨地域双活架构,降低系统RPO风险; 数据库资源能够快速弹性扩容; 架构上具备全球化能力,快速向海外扩展多机房能力。 解决方案 RDS与IDC构建异地双活架构,DTS实现双向同步。 云上使用RDS,资源能快速弹性扩容。 业务使用snowflake算法+标记地域的方式来实现不同区域主键不冲突。 业务维护网关调度规则来做流量调度。 客户价值 采用DTS构建起了异地双活容灾架构,节省成本。 云上RDS快速弹性扩容,小时级别实现资源扩展。 全球用户就近访问,提升用户体验。 架构能快速复制,允许构建更多异地数据中心。
阿里云对象存储OSS可以开启传输加速功能,那么OSS传输加速和CDN有什么区别么?事实上OSS传输加速原理和CDN有本质上的区别,来详细说下阿里云对象存储OSS传输加速和阿里云CDN的区别: 阿里云OSS传输加速和CDN区别 阿里云对象存储OSS传输加速功能与CDN加速有本质区别,阿里云CDN是利用边缘节点缓存进行加速的;而OSS传输加速是对互联网传输链路和协议策略进行优化,将远距离传输变成短距离传输,优化了传输链路与协议栈。 阿里云对象存储OSS传输加速实现OSS文件上传和下载加速,并且对非热点文件、静态或动态更新的文件下载,都可以实现加速。 阿里云OSS传输加速是需要另外付费的,与阿里云其他产品相同,传输加速功能也是有两种计费模式:包年包月和按量计费,默认开通OSS传输加速功能后,是按照按量计费的方式来支付费用的,按量计费是根据用户实际使用的流量费用,然后乘以单价,一般阿里云大陆地域的OSS传输加速费用是0.5元/GB。包年包月方式也很好理解,通过购买传输加速包来抵扣实际产生的传输加速费用,一般中国大陆地域的传输加速包100GB优惠价是38.40元,1TB优惠价348.00元。 以上是对阿里云对象存储OSS和CDN区别理解,请以官方文档为准。
在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用。Nacos既可以做配置中心,也可以做注册中心。我们先来看看在项目中如何使用Nacos做配置中心。 Nacos配置中心 在项目中使用Nacos做配置中心还是比较简单的,我们先创建SpringBoot项目,然后引入nacos-config的jar包,具体如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-config&lt;/artifactId&gt; </dependency> 如果你不想使用SpringBoot默认的nacos-config版本,也可以指定版本号。 首先,我们进入到nacos的管理后台,第一步要创建命名空间,如图: 我们创建了user的服务配置,以后user相关的微服务都在这个命名空间中拉取配置。我们点击保存,命名空间的id会自动生成,这个id是十分重要的,我们要在项目中配置这个id。命名空间创建好以后,我们再创建配置文件, 在配置列表中,我们先选中刚才新建的命名空间:user服务配置。然后再点击新建,我的截图中已经把user-provider的配置文件创建好了。我们可以看一下如何新建,如图: 其中Data ID我们叫做user-provider,group我们用来区分本地环境、测试环境、生产环境。配置格式我们选择yaml,内容我们先配置一个username看看能不能生效。 然后在resources目录下创建bootstrap.yml,这个bootstrap.yml和application.yml是不一样的,它优先加载于application.yml,大家一定要注意他们的区别。我们要在bootstrap.yml文件中,要配置nacos的地址、命名空间、文件名等信息,具体如下: spring: cloud: nacos: server-addr: nacos-host:80 config: file-extension: yml name: user-provider group: ${spring.profiles.active} namespace: e5aebd28-1c15-4991-a36e-0865bb5af930</code></code></pre> application: name: user-provider</code></pre> spring.application.name,这个不用说了,就是你应用的名称,我们叫做user-provider,用户服务的提供者。再看上面的部分server-addr,这个是nacos的地址,我们配置为nacos-host:80。其中nacos-host需要配置host,指向nacos的ip,而端口80也是需要指定的,如果不指定端口,会默认8848端口。再看config的部分,file-extension,文件的扩展名,这里我们使用yml,相应的,在nacos配置中心中,配置格式选择yaml。config.name对应着nacos管理后台的Data ID。group,在这里是分组,我们用作区分不同环境的标识,通过项目启动时传入的参数${spring.profiles.active}获得。namespace,命名空间,这里要填写命名空间的id,这个id在nacos后台中获取。这里我们填写的是user配置服务的命名空间id。到这里,在项目中使用nacos做配置中心就搭建好了。我们在项目当中写个属性类,测试一下,看看能不能取到值。 @RefreshScope@Setter@Getter@Configurationpublic class DatabaseConfig { @Value("${username}")private String username;@Value("${server.port}")private String port; } 我们写了个DatabaseConfig类,先注意一下类上面的注解,@RefreshScope这个注解可以使我们在nacos管理后台修改配置以后,项目不用重启,就可以更改变量的值。@Setter@Getter这个是Lombok的注解,可以省去setget方法。@Configuration标识这个类是一个配置类,项目启动时会实例化。在类里边,我们定义了两个变量,username和port,两个变量上面的注解@Value,可以取到对应的,属性的值。${username}这个我们在nacos管理后台已经设置了,${server.port}这个我们可以通过项目启动参数获取到,一会带着大家试一下。我们在写个controller,把变量的值打印出来,如下: @RestController@RequestMapping("user")public class UserController { @Autowiredprivate DatabaseConfig databaseConfig; @RequestMapping("config")public String config() { return databaseConfig.getUsername()+":"+databaseConfig.getPort(); } } 我们将username和port两个变量打印出来。好了,程序相关的部分就都写好了,然后,我们添加项目启动参数,如图: spring.profiles.active=local,这个参数很重要,项目要用这个local值去nacos管理后台找对应的分组group是local的配置。server.port=8080,这个是项目的启动端口,同时,我们也将这个值打印出来了。好了,我们现在启动项目,并且在浏览器中访问我们刚才写的controller,浏览器返回的结果如下: user:8080 user,是我们在nacos中配置的值,8080是我们添加的启动参数。返回结果没有问题。然后我们再去nacos管理后台将user改成tom,项目不重启,再看看返回的结果,如图: 确认发布以后,我们刷新一下浏览器, tom:8080 我们并没有重启项目,但是返回的结果变成了tom。怎么样?使用nacos做配置中心还是比较好用的吧~ Nacos注册中心 通常情况下,我们一般会选择Zookeeper、Eureka做注册中心,其实Nacos也是可以做注册中心的。既然我们项目使用了Nacos做配置中心,那么使用Nacos做注册中心也是非常好的选择。下面让我们看看在项目中如何使用Nacos做注册中心。 首先,还是在项目中引入Nacos注册中心的jar包,如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-discovery&lt;/artifactId&gt; </dependency> 我们引入了nacos-discovery的jar包,如果您不想使用默认的版本,可以指定需要引入的版本。 然后,我们就要配置Nacos注册中心的地址了,通常情况下,我们是在application.yml文件中进行配置。但是,这次我们使用了Nacos做配置中心,就可以在Nacos的管理后台进行配置了,如下: username: tomspring: cloud: nacos: discovery: server-addr: nacos-host:80 namespace: e5aebd28-1c15-4991-a36e-0865bb5af930 group: ${spring.profiles.active}&lt;/code&gt;&lt;/pre&gt;</code></code></code></pre> 我们需要在nacos.discovery节点下进行配置,server-addr,这个属性和前面的配置是一样的,nacos-host是配置了HOST,指向Nacos的ip,80端口也是需要指定的,默认端口是8848。namespace,命名空间,我们复用前面的就可以了。group,同样,我们用来区分不同的环境,它的值也是从启动参数中获取。最后,我们在项目的启动类中添加@EnableDiscoveryClient的注解,如下: @SpringBootApplication@EnableDiscoveryClientpublic class UserProviderApplication { public static void main(String[] args) { SpringApplication.run(UserProviderApplication.class, args); } } 好了,到这里,服务提供者的配置以及代码上的改动都调整完毕了,我们启动一下项目,然后去Nacos管理后台看看服务是否已经注册到Nacos当中。 我们在Nacos管理后台选择服务列表菜单,可以看到我们启动的项目已经注册到nacos中了。如果我们再启动一个服务提供者会是什么样子呢?我们刚启动的项目指定的端口是8080,我们再启动一个项目,将端口指定为8081,看看服务列表是什么样子。 我们看到实例数由原来的1变为了2。说明我们的user-provider服务有了两个,我们再点右边的详情看一下, 服务的详情以及具体的实例都给我们列了出来,我们还可以编辑和下线具体的实例,这个我们后面再介绍。 好了,到这里,服务提供者的就搭建好了,我们分别访问两个服务提供者的具体连接得到的结果如下: # http://localhost:8080/user/configtom:8080 http://localhost:8081/user/config tom:8081 接下来,我们再看看服务的消费者如何搭建。我们新建一个SpringBoot项目user-consumer,这个项目我们同样使用Nacos作为配置中心,而且要从Nacos这个注册中心获取服务列表,所以引入jar包如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-config&lt;/artifactId&gt; </dependency><dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-discovery&lt;/artifactId&gt; </dependency> 然后在bootstrap.yml中,填写nacos配置中心的相关配置,这个和前面的配置的差不多的,只需要改一下相应的文件名称就可以了。 spring: cloud: nacos: server-addr: nacos-host:80 config: file-extension: yml name: user-consumer group: ${spring.profiles.active} namespace: e5aebd28-1c15-4991-a36e-0865bb5af930</code></code></code></code></pre> application: name: user-consumer</code></pre> 注意config.name,我们改为了user-consumer。并且应用的名称改为了user-consumer。然后,我们再去Nacos管理后台添加user-consumer的配置,如图: DataID就是我们配置的user-consumer,group我们同样配置为local,标识着本地。具体的配置内容是nacos服务的地址,如图。这样我们的服务消费者项目user-consumer就可以从nacos配置中心获取到注册中心的地址和命名空间,并且可以从命名空间获取服务的地址。配置的部分就到这里了,然后再去启动类中,添加@EnableDiscoveryClient注解,如下: @SpringBootApplication@EnableDiscoveryClientpublic class UserConsumerApplication { public static void main(String[] args) { SpringApplication.run(UserConsumerApplication.class, args); } } 最后,我们写个Controller,从Nacos获取服务提供者的地址,并调用服务提供者,如下: @RestController@RequestMapping("user")public class UserController { @Autowiredprivate LoadBalancerClient loadBalancerClient; @RequestMapping("consumer")public String consumer() { ServiceInstance provider = loadBalancerClient.choose("user-provider"); String url = "http://"+provider.getHost()+":"+provider.getPort()+"/user/config"; RestTemplate restTemp = new RestTemplate(); String result = restTemp.getForObject(url, String.class); return result; } } 这个是SpringCloud Alibaba官网给出的调用示例,使用的是LoadBalancerClient,我们先将其注入。在方法里边,我们调用choose方法,选择user-provider服务,这个是我们服务提供者的名称,在nacos管理后台的服务列表中可以查看到的,这个方法会返回具体的服务实例,我们的服务实例有2个,分别是8080端口和8081端口的两个服务,在这里,默认是轮询的负载均衡策略。选择了具体的服务实例,我们就来拼装请求地址,从服务实例中获取地址和端口。最后使用RestTemplate完成调用。最后,我们配置项目启动,设置spring.profiles.active=local,并且指定端口为9090,如图: 最后,我们启动项目,访问http://localhost:9090/user/consumer,访问结果如下: tom:8080 很明显,我们调用到了8080端口的服务提供者,我们再刷新一下,看看返回结果, tom:8081 这次又调用到了8081端口的服务提供者,我们多次刷新,发现它会在8080和8081之间切换,这说明我们的负载均衡策略应该是轮询。 使用Feign完成服务的调用 上面的例子中,我们使用的是LoadBalancerClient完成服务的调用,接下来,我们分别看看Feign和Ribbon怎么调用服务。我们先来看看Feign,要使用Feign完成服务的调用,先要引入Feign的jar包,如下: <dependency> &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt;&lt;artifactId&gt;spring-cloud-starter-openfeign&lt;/artifactId&gt;&lt;version&gt;2.2.2.RELEASE&lt;/version&gt; </dependency> 然后再启动类上添加@EnableFeignClients的注解,如下: @SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class UserConsumerApplication { public static void main(String[] args) { SpringApplication.run(UserConsumerApplication.class, args); } } 接下来,我们写一个interface来完成feign的服务调用和熔断,如下: @FeignClient(name = "user-provider",fallback = UserServiceFallback.class)public interface UserService { @RequestMapping("/user/config")String config(); } 我们写了一个UserService的接口,在接口上添加@FeignClient的注解,注解里有两个属性,name指定服务的名称,这里我们指定为user-provider,这是我们前面服务提供者的名称,fallback指定发生熔断时,调用的类。当我们的服务提供者不能正常提供服务时,就会触发熔断机制,会调用熔断服务类的逻辑,返回结果。在接口中,我们写了一个config()方法,方法上添加@RequestMapping的注解,并配置具体的路径。这样,我们在调用服务的时候,通过Feign调用到具体的服务提供者了。我们再来看看熔断实现类UserServiceFallback的具体内容,如下: @Servicepublic class UserServiceFallback implements UserService { @Overridepublic String config() { return "user-fallback"; } } 首先,它是UserService接口,也就是Feign接口的实现类,然后实现接口中的方法,我们直接返回user-fallback字符串。Feign的接口和熔断的实现类都写好了,但是这还不算完,要使熔断生效,还要添加额外的配置,我们直接去nacos管理后台去配置,进入到user-consumer的配置中,添加如下配置: feign: hystrix: enabled: true</code></pre> 这个就是feign的熔断开关,默认是关闭的,现在打开。最后,我们在controller中,调用UserService接口,如下: @Autowiredprivate UserService userService; @RequestMapping("consumer-feign")public String userService() { String result = userService.config(); return result; } 将UserService,注入进来,然后直接调用方法即可。我们访问一下http://localhost:9090/user/consumer-feign,看看返回的结果。如下: tom:8080tom:8081 返回的结果和前面是一样的,我们不断的刷新,它也会在8080和8081之间轮询。 使用Ribbon完成服务的调用 同样,我们也可以使用Ribbon完成服务的调用,Ribbon和RestTemplate在内部是紧密结合的。我们只需要将RestTemplate实例化,并添加@LoadBalanced注解就可以了,如下: @Bean@LoadBalancedpublic RestTemplate restTemplate(){ return new RestTemplate(); } 然后在,controller中,我们使用这个实例化好的RestTemplate,就可以了,具体实现如下: @Autowiredprivate RestTemplate restTemplate; @RequestMapping("consumer-ribbon")public String consumerribbon() { String url = "http://user-provider/user/config";String result = restTemplate.getForObject(url, String.class); return result; } 我们将restTemplate注入进来。在具体方法中,url的地址,我们直接写服务名称user-provider加路径的方式,大家可以参照第一种调用方式,看看区别。我们重启项目,访问http://localhost:9090/user/consumer-ribbon,结果如下: tom:8080tom:8081 返回的结果和前面是一样的,我们不断的刷新,它也会在8080和8081之间轮询。 使用Nacos权重负载均衡 三种服务的调用方法都给大家介绍完了,但是,他们的负载均衡策略都是轮询,这有点不符合我们的要求,我们进入到Nacos的管理后台,调节一下服务的权重,如图: 我们将8080接口的服务权重由1改为10,点击确认,再多次刷新一下我们的访问地址,发现服务的调用还是在8080和8081之间轮询。这是什么情况?这里就不和大家卖关子了,这是因为LoadBalancerClient、Feign和Ribbon3种方式,它们的底层都是使用Ribbon做负载均衡的,而Ribbon负载均衡默认使用的策略是ZoneAvoidanceRule,我们要修改Ribbon的默认策略,让它使用nacos的权重,那么该如何配置呢? 我们进入到nacos管理后台,修改user-consumer的配置,添加如下配置: user-provider: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule</code></pre> user-provider是我们服务的名称,你配置哪个服务的负载均衡策略,就写哪个服务的名字。后面ribbon.NFLoadBalancerRuleClassName需要配置负载均衡策略的具体实现,这个实现类要实现IRule接口,在这里,我们指定实现类为com.alibaba.cloud.nacos.ribbon.NacosRule。这是nacos的负载均衡规则,它是实现了IRule接口的。我们重启项目,调用我们之前的3个链接,调用哪个效果都是一样的,我们发现返回tom:8080的次数明显增多,说明Nacos服务的权重配置生效了。小伙伴们还可以将权重改成其他的值试一下。这里就不给大家演示了。 总结 Nacos的配置中心和服务注册中心就给大家介绍完了,还是很好用的,这为我们搭建微服务提供了另外一种选择。当然消费端的调用还是首推Feign+hystrix熔断的,功能很强大,小伙伴们在项目中多实践吧~
前言 本学期开设了数据库与软件工程课程,但使用自己电脑上的虚拟机开启Centos系统,启动数据库与监听等操作太过繁琐,且较为占用系统资源,若电脑配置不够,可能不支持运行虚拟机与Oracle database服务器端。因此,我想到了通过ECS部署云数据库来进行随时随地的连接。 操作方法 若尚未购买ECS,建议选择深圳地区,共享型或突发型实例来进行环境部署的测试。其它地区的镜像市场可能并没有Oracle11g的镜像。选择完适合自己的实例后,进入镜像选择 若已经拥有了实例,则需要在实例控制台停止实例,然后点击更换操作系统。 之后,点击镜像市场搜索oracle,选择第一个即可。等待镜像导入后,启动实例,远程连接到终端。此镜像启动时会自动开启数据库监听等,因此加载较慢,需要耐心等待。此外,可以在镜像界面查看镜像提供商给予的使用手册使用指南中提示需要更改oracle目录下文件的主机名进入目录 [root@localhost ~]# cd /u01/app/oracle/product/11.2.0/db1/network/admin 然后vi 该目录下的两个文件tnsnames.ora与listener.ora将其中的主机名修改即可主机名可在阿里云实例控制台查看与修改。之后,退出SSH,再通过oracle用户登录,使用命令lsnrctl status可以查看监听状态。 连接Oracle 数据库启动时,并没有设置sys用户密码,此时需要手动设置密码后登录。设置方法点此处之后使用本地主机的SQL软件,如sqldeveloper,建立连接。主机名输入ECS实例的公网ip,端口1521(注意需要去安全组开放端口)SID为"orcl",输入用户名:sys密码:(刚设定的)点击测试,显示成功后即可连接oracle数据库。 总结 我本人在部署oracle数据库时碰了许多壁,自己安装centos图形化界面,然后使用课程实验指导书的方法进行部署失败后,搜索了大量解决方法,无果。之后偶然在镜像市场找到了成品镜像并通过调试成功连接。也算是有所收获。
前言 本学期开设了数据库与软件工程课程,但使用自己电脑上的虚拟机开启Centos系统,启动数据库与监听等操作太过繁琐,且较为占用系统资源,若电脑配置不够,可能不支持运行虚拟机与Oracle database服务器端。因此,我想到了通过ECS部署云数据库来进行随时随地的连接。 操作方法 若尚未购买ECS,建议选择深圳地区,共享型或突发型实例来进行环境部署的测试。其它地区的镜像市场可能并没有Oracle11g的镜像。选择完适合自己的实例后,进入镜像选择 若已经拥有了实例,则需要在实例控制台停止实例,然后点击更换操作系统。 之后,点击镜像市场搜索oracle,选择第一个即可。等待镜像导入后,启动实例,远程连接到终端。此镜像启动时会自动开启数据库监听等,因此加载较慢,需要耐心等待。此外,可以在镜像界面查看镜像提供商给予的使用手册使用指南中提示需要更改oracle目录下文件的主机名进入目录 [root@localhost ~]# cd /u01/app/oracle/product/11.2.0/db1/network/admin 然后vi 该目录下的两个文件tnsnames.ora与listener.ora将其中的主机名修改即可主机名可在阿里云实例控制台查看与修改。之后,退出SSH,再通过oracle用户登录,使用命令lsnrctl status可以查看监听状态。 连接Oracle 数据库启动时,并没有设置sys用户密码,此时需要手动设置密码后登录。设置方法点此处之后使用本地主机的SQL软件,如sqldeveloper,建立连接。主机名输入ECS实例的公网ip,端口1521(注意需要去安全组开放端口)SID为"orcl",输入用户名:sys密码:(刚设定的)点击测试,显示成功后即可连接oracle数据库。 总结 我本人在部署oracle数据库时碰了许多壁,自己安装centos图形化界面,然后使用课程实验指导书的方法进行部署失败后,搜索了大量解决方法,无果。之后偶然在镜像市场找到了成品镜像并通过调试成功连接。也算是有所收获。
传统环保行业一直存在着诸多问题 比如 重资产、轻研发 重硬件、轻软件 重投资、轻运营 昆仑互联 对这些痛点感同身受 一直积极探索新模式、新业态 寻找数字化方式实现产业变革、创新与融合 近日 阿里云宣布与昆岳互联合作 采用“技术+商业”双涡轮模式 共同打造环保产业互联网平台 “昆岳INECO平台” 助力传统生产制造型企业转型升级 技术上 引入阿里云工业互联网平台与数字工厂 阿里云为昆岳互联提供 云计算、物联网和人工智能的支持 从平台整体功能架构及智慧远程运维落地 采集环保系统的“物料、工艺 设备结构、设备运营 系统排放、系统管理” 等六类数据 驱动生产制造企业、环保服务型企业的数字化升级 建设满足第三方智慧远程运维管理的应用系统 支持环保系统业务管理标准化 共同构建环保产业互联网平台的产业链、价值链 商业上 平台还将依托阿里集团强大生态 构建“1平台+2中心+N应用+N服务”的体系 实现“行业资源协同分工、在线交易全程追溯 平台用户降本增效、数据资产安全保障” 接入工厂和各类服务商,打造生态金融体系 未来 阿里云将携手昆岳INECO环保产业互联网平台 将环保产业与“互联网+”多维度深度融合 推动中国环保产业变革创新发展
传统环保行业一直存在着诸多问题 比如 重资产、轻研发 重硬件、轻软件 重投资、轻运营 昆仑互联 对这些痛点感同身受 一直积极探索新模式、新业态 寻找数字化方式实现产业变革、创新与融合 近日 阿里云宣布与昆岳互联合作 采用“技术+商业”双涡轮模式 共同打造环保产业互联网平台 “昆岳INECO平台” 助力传统生产制造型企业转型升级 技术上 引入阿里云工业互联网平台与数字工厂 阿里云为昆岳互联提供 云计算、物联网和人工智能的支持 从平台整体功能架构及智慧远程运维落地 采集环保系统的“物料、工艺 设备结构、设备运营 系统排放、系统管理” 等六类数据 驱动生产制造企业、环保服务型企业的数字化升级 建设满足第三方智慧远程运维管理的应用系统 支持环保系统业务管理标准化 共同构建环保产业互联网平台的产业链、价值链 商业上 平台还将依托阿里集团强大生态 构建“1平台+2中心+N应用+N服务”的体系 实现“行业资源协同分工、在线交易全程追溯 平台用户降本增效、数据资产安全保障” 接入工厂和各类服务商,打造生态金融体系 未来 阿里云将携手昆岳INECO环保产业互联网平台 将环保产业与“互联网+”多维度深度融合 推动中国环保产业变革创新发展
前言 本学期开设了数据库与软件工程课程,但使用自己电脑上的虚拟机开启Centos系统,启动数据库与监听等操作太过繁琐,且较为占用系统资源,若电脑配置不够,可能不支持运行虚拟机与Oracle database服务器端。因此,我想到了通过ECS部署云数据库来进行随时随地的连接。 操作方法 若尚未购买ECS,建议选择深圳地区,共享型或突发型实例来进行环境部署的测试。其它地区的镜像市场可能并没有Oracle11g的镜像。选择完适合自己的实例后,进入镜像选择 若已经拥有了实例,则需要在实例控制台停止实例,然后点击更换操作系统。 之后,点击镜像市场搜索oracle,选择第一个即可。等待镜像导入后,启动实例,远程连接到终端。此镜像启动时会自动开启数据库监听等,因此加载较慢,需要耐心等待。此外,可以在镜像界面查看镜像提供商给予的使用手册使用指南中提示需要更改oracle目录下文件的主机名进入目录 [root@localhost ~]# cd /u01/app/oracle/product/11.2.0/db1/network/admin 然后vi 该目录下的两个文件tnsnames.ora与listener.ora将其中的主机名修改即可主机名可在阿里云实例控制台查看与修改。之后,退出SSH,再通过oracle用户登录,使用命令lsnrctl status可以查看监听状态。 连接Oracle 数据库启动时,并没有设置sys用户密码,此时需要手动设置密码后登录。设置方法点此处之后使用本地主机的SQL软件,如sqldeveloper,建立连接。主机名输入ECS实例的公网ip,端口1521(注意需要去安全组开放端口)SID为"orcl",输入用户名:sys密码:(刚设定的)点击测试,显示成功后即可连接oracle数据库。 总结 我本人在部署oracle数据库时碰了许多壁,自己安装centos图形化界面,然后使用课程实验指导书的方法进行部署失败后,搜索了大量解决方法,无果。之后偶然在镜像市场找到了成品镜像并通过调试成功连接。也算是有所收获。
在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用。Nacos既可以做配置中心,也可以做注册中心。我们先来看看在项目中如何使用Nacos做配置中心。 Nacos配置中心 在项目中使用Nacos做配置中心还是比较简单的,我们先创建SpringBoot项目,然后引入nacos-config的jar包,具体如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt; &lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-config&lt;/artifactId&gt; </dependency> 如果你不想使用SpringBoot默认的nacos-config版本,也可以指定版本号。 首先,我们进入到nacos的管理后台,第一步要创建命名空间,如图: 我们创建了user的服务配置,以后user相关的微服务都在这个命名空间中拉取配置。我们点击保存,命名空间的id会自动生成,这个id是十分重要的,我们要在项目中配置这个id。命名空间创建好以后,我们再创建配置文件, 在配置列表中,我们先选中刚才新建的命名空间:user服务配置。然后再点击新建,我的截图中已经把user-provider的配置文件创建好了。我们可以看一下如何新建,如图: 其中Data ID我们叫做user-provider,group我们用来区分本地环境、测试环境、生产环境。配置格式我们选择yaml,内容我们先配置一个username看看能不能生效。 然后在resources目录下创建bootstrap.yml,这个bootstrap.yml和application.yml是不一样的,它优先加载于application.yml,大家一定要注意他们的区别。我们要在bootstrap.yml文件中,要配置nacos的地址、命名空间、文件名等信息,具体如下: spring: cloud: nacos: server-addr: nacos-host:80 config: file-extension: yml name: user-provider group: ${spring.profiles.active} namespace: e5aebd28-1c15-4991-a36e-0865bb5af930 application: name: user-provider</code></pre> spring.application.name,这个不用说了,就是你应用的名称,我们叫做user-provider,用户服务的提供者。再看上面的部分server-addr,这个是nacos的地址,我们配置为nacos-host:80。其中nacos-host需要配置host,指向nacos的ip,而端口80也是需要指定的,如果不指定端口,会默认8848端口。再看config的部分,file-extension,文件的扩展名,这里我们使用yml,相应的,在nacos配置中心中,配置格式选择yaml。config.name对应着nacos管理后台的Data ID。group,在这里是分组,我们用作区分不同环境的标识,通过项目启动时传入的参数${spring.profiles.active}获得。namespace,命名空间,这里要填写命名空间的id,这个id在nacos后台中获取。这里我们填写的是user配置服务的命名空间id。到这里,在项目中使用nacos做配置中心就搭建好了。我们在项目当中写个属性类,测试一下,看看能不能取到值。 @RefreshScope@Setter@Getter@Configurationpublic class DatabaseConfig { @Value("${username}") private String username; @Value("${server.port}") private String port; } 我们写了个DatabaseConfig类,先注意一下类上面的注解,@RefreshScope这个注解可以使我们在nacos管理后台修改配置以后,项目不用重启,就可以更改变量的值。@Setter@Getter这个是Lombok的注解,可以省去setget方法。@Configuration标识这个类是一个配置类,项目启动时会实例化。在类里边,我们定义了两个变量,username和port,两个变量上面的注解@Value,可以取到对应的,属性的值。${username}这个我们在nacos管理后台已经设置了,${server.port}这个我们可以通过项目启动参数获取到,一会带着大家试一下。我们在写个controller,把变量的值打印出来,如下: @RestController@RequestMapping("user")public class UserController { @Autowired private DatabaseConfig databaseConfig; @RequestMapping("config") public String config() { return databaseConfig.getUsername()+":"+databaseConfig.getPort(); } } 我们将username和port两个变量打印出来。好了,程序相关的部分就都写好了,然后,我们添加项目启动参数,如图: spring.profiles.active=local,这个参数很重要,项目要用这个local值去nacos管理后台找对应的分组group是local的配置。server.port=8080,这个是项目的启动端口,同时,我们也将这个值打印出来了。好了,我们现在启动项目,并且在浏览器中访问我们刚才写的controller,浏览器返回的结果如下: user:8080 user,是我们在nacos中配置的值,8080是我们添加的启动参数。返回结果没有问题。然后我们再去nacos管理后台将user改成tom,项目不重启,再看看返回的结果,如图: 确认发布以后,我们刷新一下浏览器, tom:8080 我们并没有重启项目,但是返回的结果变成了tom。怎么样?使用nacos做配置中心还是比较好用的吧~ Nacos注册中心 通常情况下,我们一般会选择Zookeeper、Eureka做注册中心,其实Nacos也是可以做注册中心的。既然我们项目使用了Nacos做配置中心,那么使用Nacos做注册中心也是非常好的选择。下面让我们看看在项目中如何使用Nacos做注册中心。 首先,还是在项目中引入Nacos注册中心的jar包,如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt; &lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-discovery&lt;/artifactId&gt; </dependency> 我们引入了nacos-discovery的jar包,如果您不想使用默认的版本,可以指定需要引入的版本。 然后,我们就要配置Nacos注册中心的地址了,通常情况下,我们是在application.yml文件中进行配置。但是,这次我们使用了Nacos做配置中心,就可以在Nacos的管理后台进行配置了,如下: username: tomspring: cloud: nacos: discovery: server-addr: nacos-host:80 namespace: e5aebd28-1c15-4991-a36e-0865bb5af930 group: ${spring.profiles.active}</code></pre> 我们需要在nacos.discovery节点下进行配置,server-addr,这个属性和前面的配置是一样的,nacos-host是配置了HOST,指向Nacos的ip,80端口也是需要指定的,默认端口是8848。namespace,命名空间,我们复用前面的就可以了。group,同样,我们用来区分不同的环境,它的值也是从启动参数中获取。最后,我们在项目的启动类中添加@EnableDiscoveryClient的注解,如下: @SpringBootApplication@EnableDiscoveryClientpublic class UserProviderApplication { public static void main(String[] args) { SpringApplication.run(UserProviderApplication.class, args); } } 好了,到这里,服务提供者的配置以及代码上的改动都调整完毕了,我们启动一下项目,然后去Nacos管理后台看看服务是否已经注册到Nacos当中。 我们在Nacos管理后台选择服务列表菜单,可以看到我们启动的项目已经注册到nacos中了。如果我们再启动一个服务提供者会是什么样子呢?我们刚启动的项目指定的端口是8080,我们再启动一个项目,将端口指定为8081,看看服务列表是什么样子。 我们看到实例数由原来的1变为了2。说明我们的user-provider服务有了两个,我们再点右边的详情看一下, 服务的详情以及具体的实例都给我们列了出来,我们还可以编辑和下线具体的实例,这个我们后面再介绍。 好了,到这里,服务提供者的就搭建好了,我们分别访问两个服务提供者的具体连接得到的结果如下: # http://localhost:8080/user/configtom:8080 http://localhost:8081/user/config tom:8081 接下来,我们再看看服务的消费者如何搭建。我们新建一个SpringBoot项目user-consumer,这个项目我们同样使用Nacos作为配置中心,而且要从Nacos这个注册中心获取服务列表,所以引入jar包如下: <dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt; &lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-config&lt;/artifactId&gt; </dependency><dependency> &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt; &lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-discovery&lt;/artifactId&gt; </dependency> 然后在bootstrap.yml中,填写nacos配置中心的相关配置,这个和前面的配置的差不多的,只需要改一下相应的文件名称就可以了。 spring: cloud: nacos: server-addr: nacos-host:80 config: file-extension: yml name: user-consumer group: ${spring.profiles.active} namespace: e5aebd28-1c15-4991-a36e-0865bb5af930 application: name: user-consumer</code></pre> 注意config.name,我们改为了user-consumer。并且应用的名称改为了user-consumer。然后,我们再去Nacos管理后台添加user-consumer的配置,如图: DataID就是我们配置的user-consumer,group我们同样配置为local,标识着本地。具体的配置内容是nacos服务的地址,如图。这样我们的服务消费者项目user-consumer就可以从nacos配置中心获取到注册中心的地址和命名空间,并且可以从命名空间获取服务的地址。配置的部分就到这里了,然后再去启动类中,添加@EnableDiscoveryClient注解,如下: @SpringBootApplication@EnableDiscoveryClientpublic class UserConsumerApplication { public static void main(String[] args) { SpringApplication.run(UserConsumerApplication.class, args); } } 最后,我们写个Controller,从Nacos获取服务提供者的地址,并调用服务提供者,如下: @RestController@RequestMapping("user")public class UserController { @Autowired private LoadBalancerClient loadBalancerClient; @RequestMapping("consumer") public String consumer() { ServiceInstance provider = loadBalancerClient.choose("user-provider"); String url = "http://"+provider.getHost()+":"+provider.getPort()+"/user/config"; RestTemplate restTemp = new RestTemplate(); String result = restTemp.getForObject(url, String.class); return result; } } 这个是SpringCloud Alibaba官网给出的调用示例,使用的是LoadBalancerClient,我们先将其注入。在方法里边,我们调用choose方法,选择user-provider服务,这个是我们服务提供者的名称,在nacos管理后台的服务列表中可以查看到的,这个方法会返回具体的服务实例,我们的服务实例有2个,分别是8080端口和8081端口的两个服务,在这里,默认是轮询的负载均衡策略。选择了具体的服务实例,我们就来拼装请求地址,从服务实例中获取地址和端口。最后使用RestTemplate完成调用。最后,我们配置项目启动,设置spring.profiles.active=local,并且指定端口为9090,如图: 最后,我们启动项目,访问http://localhost:9090/user/consumer,访问结果如下: tom:8080 很明显,我们调用到了8080端口的服务提供者,我们再刷新一下,看看返回结果, tom:8081 这次又调用到了8081端口的服务提供者,我们多次刷新,发现它会在8080和8081之间切换,这说明我们的负载均衡策略应该是轮询。 使用Feign完成服务的调用 上面的例子中,我们使用的是LoadBalancerClient完成服务的调用,接下来,我们分别看看Feign和Ribbon怎么调用服务。我们先来看看Feign,要使用Feign完成服务的调用,先要引入Feign的jar包,如下: <dependency> &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; &lt;artifactId&gt;spring-cloud-starter-openfeign&lt;/artifactId&gt; &lt;version&gt;2.2.2.RELEASE&lt;/version&gt; </dependency> 然后再启动类上添加@EnableFeignClients的注解,如下: @SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class UserConsumerApplication { public static void main(String[] args) { SpringApplication.run(UserConsumerApplication.class, args); } } 接下来,我们写一个interface来完成feign的服务调用和熔断,如下: @FeignClient(name = "user-provider",fallback = UserServiceFallback.class)public interface UserService { @RequestMapping("/user/config") String config(); } 我们写了一个UserService的接口,在接口上添加@FeignClient的注解,注解里有两个属性,name指定服务的名称,这里我们指定为user-provider,这是我们前面服务提供者的名称,fallback指定发生熔断时,调用的类。当我们的服务提供者不能正常提供服务时,就会触发熔断机制,会调用熔断服务类的逻辑,返回结果。在接口中,我们写了一个config()方法,方法上添加@RequestMapping的注解,并配置具体的路径。这样,我们在调用服务的时候,通过Feign调用到具体的服务提供者了。我们再来看看熔断实现类UserServiceFallback的具体内容,如下: @Servicepublic class UserServiceFallback implements UserService { @Override public String config() { return "user-fallback"; } } 首先,它是UserService接口,也就是Feign接口的实现类,然后实现接口中的方法,我们直接返回user-fallback字符串。Feign的接口和熔断的实现类都写好了,但是这还不算完,要使熔断生效,还要添加额外的配置,我们直接去nacos管理后台去配置,进入到user-consumer的配置中,添加如下配置: feign: hystrix: enabled: true</code></pre> 这个就是feign的熔断开关,默认是关闭的,现在打开。最后,我们在controller中,调用UserService接口,如下: @Autowiredprivate UserService userService; @RequestMapping("consumer-feign")public String userService() { String result = userService.config(); return result; } 将UserService,注入进来,然后直接调用方法即可。我们访问一下http://localhost:9090/user/consumer-feign,看看返回的结果。如下: tom:8080tom:8081 返回的结果和前面是一样的,我们不断的刷新,它也会在8080和8081之间轮询。 使用Ribbon完成服务的调用 同样,我们也可以使用Ribbon完成服务的调用,Ribbon和RestTemplate在内部是紧密结合的。我们只需要将RestTemplate实例化,并添加@LoadBalanced注解就可以了,如下: @Bean@LoadBalancedpublic RestTemplate restTemplate(){ return new RestTemplate(); } 然后在,controller中,我们使用这个实例化好的RestTemplate,就可以了,具体实现如下: @Autowiredprivate RestTemplate restTemplate; @RequestMapping("consumer-ribbon")public String consumerribbon() { String url = "http://user-provider/user/config"; String result = restTemplate.getForObject(url, String.class); return result; } 我们将restTemplate注入进来。在具体方法中,url的地址,我们直接写服务名称user-provider加路径的方式,大家可以参照第一种调用方式,看看区别。我们重启项目,访问http://localhost:9090/user/consumer-ribbon,结果如下: tom:8080tom:8081 返回的结果和前面是一样的,我们不断的刷新,它也会在8080和8081之间轮询。 使用Nacos权重负载均衡 三种服务的调用方法都给大家介绍完了,但是,他们的负载均衡策略都是轮询,这有点不符合我们的要求,我们进入到Nacos的管理后台,调节一下服务的权重,如图: 我们将8080接口的服务权重由1改为10,点击确认,再多次刷新一下我们的访问地址,发现服务的调用还是在8080和8081之间轮询。这是什么情况?这里就不和大家卖关子了,这是因为LoadBalancerClient、Feign和Ribbon3种方式,它们的底层都是使用Ribbon做负载均衡的,而Ribbon负载均衡默认使用的策略是ZoneAvoidanceRule,我们要修改Ribbon的默认策略,让它使用nacos的权重,那么该如何配置呢? 我们进入到nacos管理后台,修改user-consumer的配置,添加如下配置: user-provider: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule</code></pre> user-provider是我们服务的名称,你配置哪个服务的负载均衡策略,就写哪个服务的名字。后面ribbon.NFLoadBalancerRuleClassName需要配置负载均衡策略的具体实现,这个实现类要实现IRule接口,在这里,我们指定实现类为com.alibaba.cloud.nacos.ribbon.NacosRule。这是nacos的负载均衡规则,它是实现了IRule接口的。我们重启项目,调用我们之前的3个链接,调用哪个效果都是一样的,我们发现返回tom:8080的次数明显增多,说明Nacos服务的权重配置生效了。小伙伴们还可以将权重改成其他的值试一下。这里就不给大家演示了。 总结 Nacos的配置中心和服务注册中心就给大家介绍完了,还是很好用的,这为我们搭建微服务提供了另外一种选择。当然消费端的调用还是首推Feign+hystrix熔断的,功能很强大,小伙伴们在项目中多实践吧~
如果有朋友想要进行直播平台的搭建,想了解搭建中流媒体和CDN都是用来做什么的,那么很好,欢迎你来到小路飞的课堂。本文说一说直播平台搭建开发时流媒体和CDN 的具体工作内容。 一、直播平台搭建开发之流媒体服务器发布 对整个直播平台来说流媒体发布这一环节是极其重要的,主要是因为最终面向终端用户服务的还得是分布在全网的流媒体服务器。流媒体服务器的性能好坏以及稳定性决定了终端播放器端的用户体验效果。 不少技术人员会基于IPTV流媒体服务器的基础来做,当然核心的技术点是一直在进步的。 (1)直播平台搭建中流媒体服务器还是采用C语言实现,技术人员也用PHP和JAVA做过,但是运行效率能低于C语言十倍多,用C语言来实现可以保证运行效率; (2)还将之前的多进程模型改成异步IO模型(不阻塞、数据一步到位,很适合高性能高并发应用),提高流媒体服务器的并发处理性能; (3)支持RTMP、HLS协议; (4)引入hadoop(分布式文件系统)这个分布式结构,这样有利于大规模分布式部署、容错和调度。以上的这些改进对流媒体服务器的整体性能来说有质的飞跃。 二、直播平台搭建开发之CDN内容分发 直播平台搭建开发中CDN内容分发主要指的是,对流媒体数据在全网范围内的多个节点服务器之间进行快速的分发,这样可以给播放端的用户带来更好的直播观看体验。 直播平台搭建开发目前支持的传输协议有:RTMP、HL和HTTP-FLV协议。 移动互联网的加速发展更加带动了直播行业的发展,直播平台搭建节点服务器的建设这一块,基本是依据国内互联网的整体布局,采用中心节点--各省级节点(区域节点)--地市级节点(边缘节点)的三级架构模式,把直播平台主要的用户流量可以先引导边缘节点,然后到区域节点。 直播平台搭建CDN内容分发系统是部署在Linux的服务器上的,这样也是为了保证直播平台运行的稳定性。 直播平台搭建CDN内容分发前期一般会先部署中心节点和各省级节点,保证到每个省会都有一个CDN内容分发点,每个省级节点有多台服务器,以此来组成分发集群。 以上就是在直播平台搭建开发过程中流媒体服务器和CDN内容分发的作用啦。小路飞的分享就到这啦。 声明:以上内容为作者云豹科技原创,未经作者本人同意,禁止转载,否则将追究相关法律责任
日前,蚂蚁集团数据库公司OceanBase在官网上线了OBCA 认证。OBCA是OceanBase推出的OceanBase数据库专员认证,是对学员掌握OceanBase技术技能水平的全面检验和能力认证。 从OceanBase官网认证页面可以看到,OBCA认证是 OceanBase 体系化认证培训的第一阶段,主要通过线上学习+线下培训+考试,让学员可以合理利用碎片化时间,快速了解 OceanBase 数据库的基础技术架构,掌握基础运维OceanBase的能力。据悉,OceanBase后期将会面向更多的人员推出OBCP(OceanBase 数据库认证专家) 及 OBCE(OceanBase 数据库认证大师)等认证,形成一套完整的学习体系。 有学员体验整个学习认证流程表示,OBCA 认证线上主要通过学习 OceanBase 的发展历程、应用案例、产品架构、核心功能、部署安装等知识,来理解多副本一致性协议、数据可靠及高可用、在线水平扩展、分布式事务等 OceanBase 的重要特性,最后再考试,测试掌握的程度。 OceanBase是蚂蚁集团自主研发的分布式数据库,历经阿里和蚂蚁集团内部不同场景的打磨,已经在支付宝、网商银行等核心系统上顺利运行。今年6月,蚂蚁集团正式将OceanBase独立进行公司化运作,成立北京奥星贝斯科技有限公司。OceanBase作为目前全世界唯一经过大规模金融场景长时间考验的企业级分布式关系数据库,支持完整的ACID特性,并拥有三方面的显著优势:可扩展、强一致、高可用。同时,OceanBase还高度兼容MySQL、Oracle,并具备异地多活等先进技术。 事实上,OceanBase在技术领域不断深耕的同时,也十分注重推动开发者生态的发展。去年,OceanBase就曾在全国四个重点城市举行了以“meet you up”为主题的技术论坛,跟全国技术爱好者探讨分布式数据库的技术话题,输出技术能量。此次上线OBCA认证,旨在帮助开发者尽快融入到OceanBase生态中,由浅入深的学习,一步步成长为OceanBase数据库专家。 OceanBase公司CEO杨冰表示:“我们始终坚定地相信分布式数据库就是未来的主流。OceanBase 有着十余年的专业技术积累,正在不断通过自身实践来加速新的数据库生态的建立,以帮助开发者更好地成长,也帮助DBA实现转型,培养更多的分布式数据库人才。” 截至目前,OceanBase已经在多家金融机构落地应用,包括中国工商银行、南京银行、人保健康险、西安银行、常熟农商行、苏州银行、广东农信等众多银行和保险机构。
北京多来点信息技术有限公司是北京科委、信息产业部认定的高新技术企业,为餐饮企业提供云端闭环SaaS平台。集餐饮CRM、供应链、O2O、POS支付、三方平台于一体的闭环解决方案服务商。服务全国300+城市和新加坡、伦敦等地区的35万家餐饮企业。 业务挑战 企业发展一定阶段需要构建IDC与云上跨地域双活架构,降低系统RPO风险; 数据库资源能够快速弹性扩容; 架构上具备全球化能力,快速向海外扩展多机房能力。 解决方案 RDS与IDC构建异地双活架构,DTS实现双向同步。 云上使用RDS,资源能快速弹性扩容。 业务使用snowflake算法+标记地域的方式来实现不同区域主键不冲突。 业务维护网关调度规则来做流量调度。 客户价值 采用DTS构建起了异地双活容灾架构,节省成本。 云上RDS快速弹性扩容,小时级别实现资源扩展。 全球用户就近访问,提升用户体验。 架构能快速复制,允许构建更多异地数据中心。
2022年07月
2022年06月