Azure Service Fabric 踩坑日志
近期项目上面用到了Azure Service Fabric这个服务,它是用来做微服务架构的,由于这套代码和架构都是以前同学留下来的,缺少文档,项目组在折腾时也曾遇到几个问题,这里整理如下,以供参考。
我属于Service Fabric的初学者和使用者,很多概念也都是临时学习的,我们的工程师后续会更加细致的研究它。本文仅从故障排查经验总结的角度做了一点整理,有关这个服务的详细功能,或者官方推荐的最佳实践,请参考 https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-overview
有两种不同的service fabric可供选择。有条件(钱多)的话,可以选择 managed cluster, 省事,因为相当于在service fabric 基础上又封装了一层,简化了管理。

开发环境没有必要设置那么多node,除非你的钱真的富裕得难受了。以上 managed cluster 最少有5个 node(节点),我建议开发环境用原生的 service fabric,然后 1个node就可以了,但可以把虚拟机的尺寸稍微调高一点。它会提示你说这样的设置不适合生产环境,让它提示。

选择一个富裕一点的region,以便更快的扩容,如果真的有那么一天。例如目前 China Region 3 因为是新的,比较富裕。

选择新的操作系统,避免一些出现不必要的问题,如果能用container,更好。

这个 service fabric 是基于一个所谓的 vm scale set 来进行扩展的。这个scale set,你要随时注意它有没有问题。你可以通过调整下面的参考来改变node数量,但要做好心理准备,可能需要的时间比较长。但是正常情况下,你的服务应该不至于down,因为理论上它是逐个机器更新的。

创建service fabric 服务会出现一堆东西,你可能不了解它,但你不能随便删除它,万一有用呢

如果你修改了 vm scale set的东西,一定要及时查看 service fabric cluster的状态,如果它显示为 updating,那么恭喜你,它可能正在更新。但如果它一直显示为updating,你就可能要跟我们一样加几个班了。目前没有看到命令可以重启 service fabric,且错误日志不清晰,所以有时候会让人抓狂。

以上做好了,你可能以为就结束了。然鹅并不是。service fabric的资源中,虽然可以看到有一个 loadbalance的组件,而且也有一个对外的ip地址,但是它不能用来直接做微服务的对外访问,因为你的微服务可能会有N个(理论上),而每个微服务呢,建议要有独立的端口才行。这个无法在loadbalance组件中做设置。

所以你需要有一个Application Gateway 的东西,能接管前端的用户请求,并且做路由。我万万没想到,在这个环节会遇到一些挑战,教训非常惨痛。首先,你需要映射https的端口的话,当然需要准备证书。这个证书,我们建议放在 key vault中。这里要命的地方是,它在创建https listener时会让你上传一个pfx文件,并且必须要有一个password,而从key vault中导出的pfx,默认并不需要password。所以你可能需要下一段代码。
点击查看代码
Install-Module AzureRM
Connect-AzureRMAccount -Environment AzureChinaCloud $vaultName = "xxxxx"
$certificateName = "xxxxx"
$pfxPath = [Environment]::GetFolderPath("Desktop") + "\$certificateName.pfx"
$password = "pass@word1"
$pfxSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certificateName
$pfxUnprotectedBytes = [Convert]::FromBase64String($pfxSecret.SecretValueText)
$pfx = New-Object Security.Cryptography.X509Certificates.X509Certificate2
$pfx.Import($pfxUnprotectedBytes, $null, [Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
$pfxProtectedBytes = $pfx.Export([Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $password)
[IO.File]::WriteAllBytes($pfxPath, $pfxProtectedBytes)

先记录了这么多
Azure Service Fabric 踩坑日志的更多相关文章
- Azure Service Fabric 开发环境搭建
微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...
- 人人都可以开发高可用高伸缩应用——论Azure Service Fabric的意义
今天推荐的文章其实是微软的一篇官方公告,宣布其即将发布的一个支撑高可用高伸缩云服务的框架--Azure Service Fabric. 前两天,微软Azure平台的CTO Mark Russinovi ...
- How to deploy JAVA Application on Azure Service Fabric
At this moment, Azure Service Fabric does not support JAVA application natively (but it's on the sup ...
- Hyperledger Fabric 踩坑汇总
搭建基础环境 阿里云安装出现的一些问题解决 1. [signal SIGSEGV: segmentation violation code=0x1 addr=xxx pc=xxx] 类似的错误:原始错 ...
- Vue 踩坑日志 - 有关路由传参的坑
1.有关路由传参 vue中当通过params传过去的参数刷新页面以后会消失,所以可以用query传参.但此时又会出现另一个坑,刷新后数据仍在.但这是针对单个的某个变量的. 如果传入一个对象的话,刷新页 ...
- ReactNative踩坑日志——OnPress随着render()执行被自动调用?
在ReactNative中,Text.Button以及其他Touchable包装成的可点击控件,都可以通过onPress属性为其指定点击时的响应函数. 在有些情况下,我们会把这些点击函数先定义好,然后 ...
- ReactNative踩坑日志——使用async/await语法解决网络请求的异步导致的指令执行顺序错乱问题
转载请注明原文地址: ReactNative的fetch是天然的异步请求,因此,如果你在一个代码块中使用了fetch,那么在执行的时候程序不会等待网络响应结束才执行下一条代码,而是会直接按顺序执行完整 ...
- ReactNative踩坑日志——代码执行方式(面向对象)
在ReactNative中,是以面向对象的方式执行代码的.处于同一{}內的代码以对象的形式执行,也就是说,程序虽然会自上而下执行代码,但是它会保证当前整个代码块內的语句执行完毕才执行下一代码块. 举个 ...
- ReactNative踩坑日志——fetch如何向服务器传递参数
一:简单参数 简单的参数,我们可以使用手动拼接的方式传递. 格式为: fetch(url?key1=val1&key2=val2&...).then((response) => ...
随机推荐
- httpRunner使用小结
1.每个系统可以给所有相关接口准备一份完整的主流程数据,这样就不用每执行一条用例就要先执行很多前置用例2.每条用例在设计之初,关于使用的前置数据,以及条件判断的数据值,以及设置的前提条件数据值,尽量保 ...
- 怎么获取 Java 程序使用的内存?堆使用的百分比?
可以通过 java.lang.Runtime 类中与内存相关方法来获取剩余的内存,总内存及 最大堆内存.通过这些方法你也可以获取到堆使用的百分比及堆内存的剩余空间. Runtime.freeMemor ...
- C++11最常用的新特性如下
1.auto关键字:编译器可以根据初始值自动推导出类型.但是不能用于函数传参.定义数组以及非静态成员变量. 2.nullptr关键字:是一种特殊类型的字面值,它可以被转换成任意其它类型的指针:而NUL ...
- spring的核心模块有哪些?
Spring的七个核心模块,供大家参考,具体内容如下 1.Spring core:核心容器 核心容器提供spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关 ...
- Redis List Type
Redis列表的操作命令和对应的api如下: lpush/rpush [list] [value] JedisAPI:public Long lpush/rpush(final String key, ...
- Linux 中进程有哪几种状态?在 ps 显示出来的信息中, 分别用什么符号表示的?
1.不可中断状态:进程处于睡眠状态,但是此刻进程是不可中断的.不可中断, 指进程不响应异步信号. 第 441 页 共 485 页2.暂停状态/跟踪状态:向进程发送一个 SIGSTOP 信号,它就会因响 ...
- Kube-OVN:大型银行技术团队推荐的金融级云原生网络方案
近日,由TWT社区主办的2021容器云职业技能大赛团队赛的冠军作品:<适用于大中型银行的云原生技术体系建设方案>中,Kube-OVN成为银行技术团队推荐的金融级云原生网络最佳实践.本文部分 ...
- 领域驱动(DDD)设计和开发实战
领域驱动设计(DDD)的中心内容是如何将业务领域概念映射到软件工件中.大部分关于此主题的著作和文章都以 Eric Evans 的书<领域驱动设计>为基础,主要从概念和设计的角度探讨领域建模 ...
- vue全家桶+axios+jsonp+es6 仿肤君试用小程序
vue全家桶+axios+jsonp+es6 仿肤君试用小程序 把自己写的一个小程序项目用vue来实现的,代码里面有一些注释,主要使用了vue-cli,vue,vuex,vue-router,axoi ...
- Python疫情爬取输出到txt文件
在网上搬了一个代码,现在不适用了,改了改 import requestsimport jsondef Down_data(): url = 'https://view.inews.qq.com/g2/ ...