摘要: 1、修改集群负载均衡的“域名设置”时,需要重新部署 acsrouting (容器服务内置的路由服务),不然访问时会出现 “503 Service Unavailable. No server is available to handle this request.” 错误。 2、使用集群的负载均衡,阅读全文
posted @ 2017-06-22 16:58 dudu 阅读(39) 评论(1) 编辑
摘要: 阿里云RDS目前支持的是PostgreSQL 9.4,而gitlab支持的最低版本是PostgreSQL 9.6.1,不升级PostgreSQL,gitlab就无法升级,阿里云RDS短期内不进行升级,被迫无奈下只能改用自己用阿里云ECS搭建的PostgreSQL服务器。这篇随笔记录一下数据库迁移的主要步骤。阅读全文
posted @ 2017-06-21 22:35 dudu 阅读(34) 评论(0) 编辑
摘要: 上周欣喜地发现,微软官方终于针对 asp.net core 在使用负载均衡的情况下从 http 强制重定向至 https 的问题提供了解决方法。但实际使用之后,欣喜变成了失望 —— 微软对这个问题的理解和我们不一样,造成这个方法对我们不适用,不得不继续使用我们的土方法。阅读全文
posted @ 2017-06-18 19:58 dudu 阅读(562) 评论(8) 编辑
摘要: 这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 —— 如果将包含敏感信息的应用配置文件 appsettings.Production.json 传递给运行在容器中的 asp.net core 应用。Docker 针对这样的应用场景已经提供了解决方案 —— Docker Secrets阅读全文
posted @ 2017-06-11 16:50 dudu 阅读(107) 评论(1) 编辑
摘要: 在最近刚接触 docker 容器时,误以为 docker 容器是一个轻量级的虚拟机,容器启动后,只要我不把容器关闭,可以在其中任意执行 shell 命令,想干啥就干啥。后来明白了,docker 容器是一个轻量级的终端阅读全文
posted @ 2017-06-10 10:43 dudu 阅读(141) 评论(0) 编辑
摘要: 部署场景是这样的,我们基于 ASP.NET Core 2.0 Preview 1 开发了一个用于管理缓存的 Web API ,想通过阿里云容器服务基于 Docker 部署为内网服务。在这篇博文中分享一下经过实践验证的操作步骤。阅读全文
posted @ 2017-06-05 15:59 dudu 阅读(137) 评论(0) 编辑
摘要: 在前一篇博文中我们了解了阿里云容器服务的路由机制。在这篇博文中,我们用nginx镜像创建一个容器实际体验一下。使用容器服务首先要创建一个集群(Cluster),比如这里我们创建一个名叫websites的集群(使用的是swarm mode)。创建好集群后,点击“管理”,进入集群管理页面 -> “负载均衡” -> “域名设置”阅读全文
posted @ 2017-06-03 18:23 dudu 阅读(109) 评论(0) 编辑
摘要: 最近我们开始尝试基于阿里云容器服务使用Docer进行生产环境的自动化部署,首先遇到的一个问题是 —— 如何部署负载均衡(这里的负载均衡是指阿里云负载均衡SLB)?面对这个问题,我们首先关注的是这个问题 —— 阿里云负载均衡与容器究竟是什么关系?阅读全文
posted @ 2017-06-02 12:14 dudu 阅读(125) 评论(2) 编辑
摘要: eShopOnContainers 是 《.NET Microservices – Architecture for Containerized .NET Applications》这本微软出品的电子书中的示例应用程序。eShopOnContainers 的 GitHub 地址是 https://github.com/dotnet-architecture/eShopOnContainers ,它不仅是一个示例应用,而且是一个开源项目,接受代码捐赠。阅读全文
posted @ 2017-06-01 10:51 dudu 阅读(173) 评论(0) 编辑
摘要: 最近在学习如何用 Docker 部署生产环境中的 ASP.NET Core 站点,作为一个 Docer 新手,从何处下手更容易入门呢?一开始就手写 Docker 配置文件容易让人产生挫败感,想到 Visual Studio 2017 对 Docker 的支持(Docker Support),也许借助它自动生成Docker配置文件、初步体验一下 Docker 部署是一个入门捷径,遂据此想法尝试了一下,感觉不错。阅读全文
posted @ 2017-05-30 17:03 dudu 阅读(181) 评论(1) 编辑
摘要: 这是最近在实际开发中遇到的一个问题,用 asp.net core 开发一个后端 web api ,根据指定的 key 清除 2 台 memcached 服务器上的缓存。背景是我们在进行 .net core 迁移工作,asp.net 项目与 asp.net core 项目并存,为了避免两种类型项目的缓存冲突,我们分别用了 2 台不同的 memcached 服务器。阅读全文
posted @ 2017-05-21 12:10 dudu 阅读(243) 评论(4) 编辑
摘要: 自从接触 IOptions 之后,一直纠结这样的问题:自己定义的 Options 要不要实现 IOptions 接口。今天在使用 EnyimMemcachedCore ,需要手动 new MemcachedClientOptions 给 MemcachedClientConfiguration 的构造函数传参时,终于明白了实现 IOptions 的真正用处。阅读全文
posted @ 2017-05-20 15:12 dudu 阅读(235) 评论(2) 编辑
摘要: 在将我们的 web api 从 .NET Framework 迁移至 .net core(asp.net core 1.1)之后,遇到一个问题。之前返回值类型为 HttpResponseMessage 的 web api 。原本会返回 json 格式的业务数据,现在返回的却是对 HttpResponseMessage 自己的 json 序列化数据阅读全文
posted @ 2017-05-18 12:03 dudu 阅读(177) 评论(1) 编辑
摘要: 这是5月11日遇到的一个问题,1台1核1G阿里云Linux服务器运行着生产环境中的ASP.NET Core站点,出现CPU 100%问题。开始以为是这台服务器负载高引起的,于是将这台服务器从负载均衡上摘下来。这时奇怪的事情发生了,即使没有负载(无用户访问),CPU也在接近100%范围波动。阅读全文
posted @ 2017-05-17 12:02 dudu 阅读(281) 评论(6) 编辑
摘要: C# 7.0的模式匹配(Pattern Mathing)不仅可以节省代码,而且可以让代码更流畅(Fluent),今天又在实际开发中体会了一下。不用模式匹配的代码,需要先获取返回值,然后用if进行判断。使用模式匹配的代码,在if中获取返回值并进行判断,一气呵成。阅读全文
posted @ 2017-05-12 18:46 dudu 阅读(264) 评论(6) 编辑
摘要: 西雅图时间5月10日,微软在 Build 2017 大会上发布了 ASP.NET Core 2.0 Preview 1 ( 详见 Announcing ASP.NET 2.0.0-Preview1 and Updates for .NET Web Developers )。以下是我关注的、并且经过自己实际验证的贴心的新特性阅读全文
posted @ 2017-05-12 14:11 dudu 阅读(1106) 评论(6) 编辑
摘要: 这是一位朋友问我的问题,写篇随笔回答一下。有2种方法,一种叫丑陋的方法 —— IConfiguration ,一种叫优雅的方法 —— IOptions 。 1)先看丑陋的方法 比如在 RedisClient 中需要读取 appsettings.json 中的 redis 连接字符串: 需要在 Red阅读全文
posted @ 2017-05-10 18:17 dudu 阅读(280) 评论(4) 编辑
摘要: 这是我们在实际ASP.NET Core项目中用到的,验证用户名中是否包含空格。开始是这么实现的(继承ValidationAttribute,重写IsValid方法)。但发现这样只对服务端验证有效,对前端验证无效。查资料后知道原来还需要实现 IClientModelValidator 接口。这样依然不够,还需要添加真正干活的前端验证js代码。阅读全文
posted @ 2017-05-05 14:04 dudu 阅读(255) 评论(0) 编辑
摘要: 今天在重构代码时对下面的一堆if语句实在看着不顺眼。突然想到 C# 7.0 的新特性 —— Pattern Matching in C# 7.0 Case Blocks,眼前一亮。于是试试看能否消灭这一堆if,结果如愿以偿,又一次实际体会到 C# 7.0 的魅力。阅读全文
posted @ 2017-05-04 14:03 dudu 阅读(303) 评论(0) 编辑
摘要: 我只发现IOptions的一个用处——方便了在.NET Core应用程序中使用强类型配置。如果没有IOptions,使用强类型配置需要自己解决下面2个问题:1)将配置文件(比如appsettings.json)中的配置反序列化至配置类的实例中;2)注入配置类的单例阅读全文
posted @ 2017-04-20 21:48 dudu 阅读(285) 评论(5) 编辑