微服务实践之路
文章平均质量分 68
凌霄羽
专注于SpringCloud、Docker、云计算、SaaS Performance、持续交付等相关领域,积累了丰富的互联网架构设计经验。
展开
-
避免服务发现GC Overhead Limit Reached风险
我们在使用开源的Spring-Cloud-Netflix(Spring Cloud 1.2.3.RELEASE)的服务发现中发现了一个已知Bug, 会影响使用RestTemplate方式进行服务调用时,存在Servo监控对象分配过多,GC Overhead Limit Reached风险。https://github.com/spring-cloud/spring-cloud-netfli原创 2017-11-17 13:14:54 · 2046 阅读 · 1 评论 -
error 日志规范
基于 日志服务使用规范 ,需要对 error 级别的日志做更明确的规范,以方便 监控系统 和 error日志快速收集工具 分析和使用。解决方案正常日志默认最高使用warn级别,只有严格匹配error条件的才可使用error级别明确定义哪些信息适合使用 error 级别 可以使用 error 级别的条件:影响系统正常运行影响业务正常运行明确需要人工干预找 业务架构了解更细颗粒度的 error 条件使...原创 2018-02-28 17:09:49 · 1416 阅读 · 0 评论 -
异步文件日志输出问号的解决方案
现象日志输出使用 AsyncAppender 时,输出的文件行号信息是 ?:? 例如日志配置<!-- Simple file output --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- encoder defaults to ch.qo...原创 2018-03-06 10:38:50 · 4866 阅读 · 0 评论 -
分布式任务调度调研
批处理服务/调度中心现在多数是通过消息队列和workflow engnie来调度。但是,部分C#和Java代码是通过单线程来运行的。需要管理跑批的依赖关系看看是否可以使用Spring Batch、Dangdang也有一个框架ElasticJob多个任务的组合、调度与监控解决方案重点解决各项目组的跑批任务调度问题,使用azkaban做分布式任务调度系统。azkaban的连接:https://azka...原创 2018-02-27 09:16:31 · 776 阅读 · 0 评论 -
前端项目包依赖管理
前端开发时使用npm来对依赖的第三方包进行管理,在开发时使用 npm install --save 安装新的依赖包时,会在package.json文件中自动加上 ^x.x.x 的版本号。在使用npm install安装环境的依赖时,不同环境会依据 ^x.x.x 去安装不同的最新版本,此时可能存在版本不兼容的问题,导致流程失败。 解决方式: 一: 利用npm的shrinkwrap模块生...原创 2018-04-30 09:58:26 · 3843 阅读 · 0 评论 -
服务标识规范
介绍GAV说明模板例子注意Spring说明模板例子注意Metadata说明使用条件模板例子问题之后可行的改进如何快速使用规范如何保障规范 介绍服务标识,既每个服务全局可辨识的唯一标识,统一和规范的目的是:便于所有人员定位服务便于服务在各环节自动化我们将从3个角度去规范'服务标识',分别是 GAV、Spring、Metadata以下所有[例子]中,假设:[应用]commonservice[服务]sm...原创 2018-05-01 16:17:16 · 1335 阅读 · 0 评论 -
Druid数据源监控及慢sql记录使用文档
注册druid 监控servlet管理界面URl: http://localhost:8081/druid用户名:admin密码: p@ssw0rd用户名和密码可以修改。 @Value("${druid.stat.loginUsername:admin}") private String loginUsername; @Value("${druid.stat.loginPa...原创 2018-02-23 08:57:36 · 4605 阅读 · 0 评论 -
定位慢sql
引入druiddruid包装datasource<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId></dependency>添加Druid监控添加Druid监控@Value("${druid.stat.loginUse...原创 2018-02-22 09:46:15 · 316 阅读 · 0 评论 -
zipkin集成到node,C#
1、node与zipkin集成结论:暂时只考虑已有产品线的node与zipkin的集成。如果后续有新的node服务,推荐使用zipkin-js官方使用的rest + zipkin-instrumentation-cujojs-rest组合。原因:1、zipkin与node集成需要node的版本号 >= 6.0;2、zipkin与express的集成非常简单,并且侵入性也小,但是与client...原创 2018-02-21 09:12:41 · 1574 阅读 · 0 评论 -
Eureka Client关闭后要被同步到其他Client需要等待多久
问:Eureka Client关闭后要被同步到其他Client需要等待多久?1. 死的服务让eureka server确认它是死了,那就是3次heartbeat的时间3*30=90s2. 新的服务要去重新刷新cache 的时间30s, 如果一次刷新连接服务器,也会尝试重新刷新那么总的算下来应该坏的情况是> 90 + 30 = 120s那么有办法优化吗?我们期望降低等待时间原创 2017-11-17 13:24:30 · 3321 阅读 · 0 评论 -
Zuul丢失Cookie的解决方案
我们是使用spring cloud zuul作为api-gateway实践中,发现默认zuul会过滤掉cookie等header信息,有些业务场景需要传递这些信息该怎么处理呢?处理方式 在api-gateway的application.properties文件中添加 zuul.sensitive-headers= 问题原因 负责根据ServiceId来路由的RibbonRo...原创 2018-02-11 09:38:23 · 14745 阅读 · 0 评论 -
数据库中间件mycat
当业务系统复杂度或单表数据量增加,有可能涉及到分库、分表的情况,这时候就需要一个对用户来说足够透明的中间件,为用户提供数据库查询、更新、删除、插入服务。解决方案: 当前国内数据库中间件有mycat、Atlas、cobar等,Mycat是一个可以用于MySQL读写分离和高可用的中间件;一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代MySQL的加强版数据库...原创 2018-02-26 11:46:11 · 287 阅读 · 0 评论 -
集成Hystrix实践
Hystrix能帮助服务在调用外部依赖时限流和降级,可在现有框架条件下按以下步骤集成Hystrix。引入spring-cloud-starter-hystrix修改POM, 注意exclude rxjava,否则会和现有slueth依赖冲突。引入spring-cloud-starter-hystrix1234567891011<dependency> <groupId>...原创 2018-02-13 15:31:25 · 938 阅读 · 0 评论 -
Hystrix限流降级
Hystrix:供分布式系统使用,提供延迟和容错功能,隔离远程系统、访问和第三方程序库的访问点,防止级联失败,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。今天稍微复杂点的互联网应用,服务端基本都是分布式的,大量的服务支撑起整个系统,服务之间也难免有大量的依赖关系,依赖都是通过网络连接起来。 在高并发访问下,这些依赖的稳定性与否对系统的影响非常大,但是依赖有很多不可控问题:如网络连接缓慢...原创 2018-02-13 15:29:47 · 1305 阅读 · 0 评论 -
通过Zuul访问服务的URL含有中文字符的解决方案
通常URL中很少含有中文,无奈业务实现各种奇葩都有,在URL中请求参数里带有中文。在以前直接访问服务时,没有问题,但现在通过API网关zuul,就出现了badMessage: 400 Illegal character 错误,为什么呢?如何解决这个问题呢?问题 1)部分中文出现 badMessage: 400 Illegal character 错误 ...原创 2018-02-12 09:25:31 · 3853 阅读 · 2 评论 -
ribbon负载均衡可选规则
RoundRobinRule:最简单的轮询规则BestAvailableRule :最佳使用性规则,选择正在请求中的并发数最小的那个server,除非这个server在熔断中。 ZoneAvoidanceRule:区域敏感性规则,如果这个ip区域内有一个或多个实例不可达或响应变慢,都会降低该ip区域内其他ip被选中的权重。 AvailabilityFilteringRule:可用性敏感规则,首...原创 2018-02-14 13:12:51 · 873 阅读 · 0 评论 -
Hystrix基于RxJava的异步执行模式
需求:了解Hystrix基于RxJava的异步执行模式总结:1. 什么是RxJavaReactiveX.io给的定义是,Rx是一个使用可观察数据流进行异步编程的编程接口,ReactiveX结合了观察者模式、迭代器模式和函数式编程的精华。Rx的Observable模型让你可以像使用集合数据一样操作异步事件流,对异步事件流使用各种简单、可组合的操作。2. RxJava vs Callback vs F...原创 2018-02-15 11:14:40 · 3529 阅读 · 0 评论 -
spring boot使用https,以及https与http共存
1,使用https1,生成证书先找到你使用的Java JDK,在bin文件夹中找到工具keytool,如何你设置了java的环境变量的话,直接在命令行执行命令如下(Windows和Linux都是一样的):keytool -genkey -alias [别名] -keyalg RSA 将证书放在classpath下,并在application.properties中添加如下配置,server.ssl...原创 2018-02-16 00:52:52 · 4370 阅读 · 0 评论 -
spring boot多数据源配置
1、在application.properties中配置数据库连接参数#数据源01database.01.driverClassName=com.mysql.jdbc.Driverdatabase.01.username=usernamedatabase.01.password=passworddatabase.01.url=url #数据源02database.02.driverClassNa...原创 2018-02-16 20:44:17 · 1905 阅读 · 0 评论 -
升级spring boot从1.3.2.RELEASE到1.5.1.RELEASE
升级公司framework依赖的spring boot版本,从1.3.2.RELEASE升级到1.5.1.RELEASE解决方案:1.spring boot版本主要更新内容Spring Boot 1.4.0 Release Notes 1) TestRestTemplate:the TestRestTemplate class no longer directly extends Res...原创 2018-02-17 05:45:54 · 1695 阅读 · 0 评论 -
ID生成器调研
介绍:根据ID生成器业务需求,在网上找了一些文章和解决方案的优缺点,redis、snowflake 有第三方提供的方法,可根据公司业务需求进行定制,供大家分析:【常见方法一:使用数据库的 auto_increment 来生成全局唯一递增ID】【可以服务及SDK实现】优点:(1)简单,使用数据库已有的功能(2)能够保证唯一性(3)能够保证递增性(4)步长固定缺点:(1)可用性难以保证:数据库常见架构...原创 2018-02-20 08:34:14 · 381 阅读 · 0 评论 -
Spring session调研(Cookie、Token)
在大部分时候,我们在讨论API的设计时,会从功能的角度出发定义出完善的、易用的API。而很多时候,非功能需求如安全需求则会在很晚才加入考虑。而往往这部分会涉及很多额外的工作量,比如与外部的SSO集成,Token机制等等。对该安全需求,一般有如下方案:• 基于session的认证鉴权• 基于token的认证鉴权基于session由于HTTP协议本身是无状态的,服务器需要某种机制来区分每个请求。比...原创 2018-02-24 09:34:39 · 1678 阅读 · 0 评论