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) => ...
随机推荐
- Chroot 特性 ?
3.2.0 版本后,添加了 Chroot 特性,该特性允许每个客户端为自己设置一个命名 空间.如果一个客户端设置了 Chroot,那么该客户端对服务器的任何操作,都将 会被限制在其自己的命名空间下. ...
- 【Java】这 35 个 Java 代码优化细节!
前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没 ...
- Java并发机制(8)--concurrent包下辅助类的使用
Java并发编程:concurrent包下辅助类的使用 整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3920397.html 1.CountDown ...
- JdbcTemplate?
JdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成基本数据类型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处理.
- SpringBoot项目集成swagger报NumberFormatException: For input string: ""
java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.f ...
- nginx使用与配置
一.nginx操作命令 nginx常用命令: 验证配置是否正确: nginx -t 查看Nginx的版本号:nginx -V 启动Nginx:start nginx 重新加载nginx:nginx.e ...
- 指出在 spring aop 中 concern 和 cross-cutting concern 的不同之处?
concern 是我们想要在应用程序的特定模块中定义的行为.它可以定义为我们想 要实现的功能. cross-cutting concern 是一个适用于整个应用的行为,这会影响整个应用程序. 例如,日 ...
- Servlet与JSP之间相互传值问题
一.JSP向Servlet传值 JSP向Servlet传值的方式有三种:URL后面跟参数.form表单提交.在JSP内置对象Session设置值. URL后面跟参数 JSP文件:<a href= ...
- DRF(Django REST Framework)框架
目录 一.DRF中的Request 二.前戏: 关于面向对象的继承 三.初级版本 1. settings.py文件 -- 注册app 2. models.py文件 -- 创建表 3. admin.py ...
- 11_滞后补偿器_Lag Compensator_Matlab_Simulink
下图中左边没有补偿器的稳态误差,右边是有只猴补偿器的稳态误差,H(s)为滞后补偿器的原因是H(s)bode图的相位图是负的 其中黄线是没有滞后补偿器的,蓝线是滞后补偿器中p = 1 ,q = 9的曲线 ...