Mr.栋

简单


  • 首页

  • 关于

  • 归档

  • 标签

读ThreadLocal源码学习内存泄漏问题

发表于 2018-05-31 | 阅读次数

线程安全问题

Thread代码如下,ThreadLocal.ThreadLocalMap threadLocals 这个为 Thread的属性

1
2
3
4
public
class Thread implements Runnable {

ThreadLocal.ThreadLocalMap threadLocals = null;
阅读全文 »

saga

发表于 2018-05-29 | 阅读次数

saga

微服务公认难点在于一致性,跨服务之间如何保证一致性成为业界难点,在DDD中给出了解决方案,既:长时处理过程(saga),其设计思想可以参照:

阅读全文 »

基于DDD重构历史代码有感

发表于 2018-05-25 | 阅读次数

业务中常见问题

在业务初期的场景中由于没有明确的模型概念导致代码中大量的持久层引用,这在业务简单的情况下是可以接受的,因为不能预测业务的趋势.随着业务的逐渐扩张,一个service中引入的dao会越来越多,可能多个service中会引用同一个dao,这样如果其中一个dao的表结构变更或者更新逻辑改变则会影响很多地方,导致开发人员在扩展功能的同时要照顾到老的代码引用该dao的地方,所以这时需要引入聚合的概念来清晰的划分出职责.

阅读全文 »

oAuth2原理

发表于 2017-09-30 | 阅读次数

oAuth2原理

模式

客户端模式(Client Credentials Grant)

用于api资源保护

密码模式(Resource Owner Password Credentials Grant)

用于集成用户体系

简化模式(implicit grant type)

不常用

授权码模式(authorization code)

功能最完整的授权模式,用于第三方登录,类似微博

阅读全文 »

consul vs eureka

发表于 2017-09-25 | 阅读次数

consul 与 eureka

场景

consul适用场景ca 强一致性

eureka适用场景ap 可靠性

nginx动态发现zuul

consul通过consul-template实现

eureka可以通过zuul的启动脚本+定时任务实现

定时通过rest(https://github.com/Netflix/eureka/wiki/Eureka-REST-operations)轮训eureka中zuul的状态是否和nginx配置文件中的信息是否一致,不一致则reload.

consul缺点

consul重启后不自动加载已注册的服务

springcloud调优(Dalston.RELEASE版本)

发表于 2017-06-29 | 阅读次数

zuul

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 适用于ApacheHttpClient,如果是okhttp无效。每个服务的http客户端连接池最大连接,默认是200.
zuul.host.maxTotalConnections=2000
# 适用于ApacheHttpClient,如果是okhttp无效。每个route可用的最大连接数,默认值是20。
zuul.host.maxPerRouteConnections=2000

ribbon.MaxConnectionsPerHost=2000
ribbon.MaxTotalConnections=20000
# 转发后台服务的最大连接时间
ribbon.ConnectTimeout=30000
# 转发后台服务的最大读取时间
ribbon.ReadTimeout=30000
ribbon.PoolMaxThreads=2000
server.tomcat.max-threads=2000
server.tomcat.max-connections=2000
server.tomcat.accept-count=1000
zuul.semaphore.maxSemaphores=2000
zuul.host.socket-timeout-millis=60000
zuul.host.connect-timeout-millis=10000
# 触发hystrix短路开启时间,该值需要小于ribbon.ReadTimeout才会生效,zuul的hystrix只会对应到service级别不能针对单个接口
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=20000
hystrix.command.default.execution.isolation.thread.semaphoreMaxConcurrentRequests=1000
hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests=2000
hystrix.command.default.execution.isolation.strategy=THREAD

feign

1
2
3
4
5
6
7
8
9
10
11
12
# 注意Dalston.RELEASE版本的feign hystrix默认是开启状态的,如果有需要我们可以根据业务情况选择是否开启,开启后需要设置hystrix配置
feign.hystrix.enabled=false
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=60000
hystrix.command.default.execution.isolation.thread.semaphoreMaxConcurrentRequests=1000
hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests=2000
hystrix.command.default.execution.isolation.strategy=THREAD

ribbon.MaxConnectionsPerHost=2000
ribbon.MaxTotalConnections=20000
ribbon.ConnectTimeout=30000
ribbon.ReadTimeout=30000
ribbon.PoolMaxThreads=2000

RobotFramework

发表于 2017-06-07 | 阅读次数

RobotFramework使用手册

简介

RobotFramework是一个通用的测试自动化框架验收测试和验收测试驱动开发(ATDD)。它易于使用的表格测试数据的语法和使用关键字驱动的测试方法。它的测试功能可以使用测试库与Python或Java实现,用户可以创建新的更高层次的关键词使用相同的语法,从现有的用于创建测试用例

安装

安装 WxPython

安装Ride的前置条件
下载页面: http://wxpython.org/download.php#stable。
在选择版本下载的时候要注意选择与 Python 版本对应的版本,并且选择 unicode 版本,比如版本:wxPython2.8-win32-unicode-py26.exe,否则安装完成后不能支持中文。
下载完成后,选择默认项进行安装即可。

安装 Robot Framework

简称RF,是基于python语言封装的一套自动化测试框架。
进入 Python 的安装路径,执行命令“pip install robotframework”或者通过下载页面 https://pypi.python.org/pypi/robotframework下载源码。
解压后,执行命令“python setup.py install”进行安装。进入 Python 的安装路径,执行命令“pip install robotframework”。

安装 robotframework-ride

Ride是编辑器也就是测试人员编写case用的工具。
进入 Python 的安装路径,执行命令“pip install robotframework-ride”。

RF常用包

pip install robotframework-requests
pip install robotframework-httplibrary
pip install demjson
Wiki:http://robotframework.org/robotframework/latest/libraries/XML.html
pip install robotframework-databaselibrary
pip install PyMySQL

常见问题

解决robotframework 3.0打印中文为unicode编码问题
http://www.robotframework.net/?/article/94

读取数据库时中文返回“??”时,注意在Connect To Database Using Custom Params的连接后加入charset=’utf8’

linux上中文兼容解决:
例子: Unexpected error: UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe6 in position 977: ordinal not in range(128)

修改:

1
2
/usr/lib/python2.7/site-packages/HttpLibrary/livetest.py
/usr/lib/python2.7/site-packages/HttpLibrary/__init__.py

加入:

1
2
reload(sys)
sys.setdefaultencoding('utf8')

删除.pyc文件

springcloud基础搭建

发表于 2017-05-10 | 阅读次数

springcloud简介

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等项目。

image

阅读全文 »

领域驱动小结

发表于 2017-01-20 | 阅读次数

CQRS(命令查询责任分离)

命令操作和查询操作分开,当有命令操作时,正常执行业务逻辑后发个异步通知(观察者模型),然后对应的视图服务更新到订制的视图中(可以通过redis,mysql,es实现)

EVENTSOURCE(事件源)

数据库中无update,只有insert,会存在数据量过大的问题,解决办法,快照

AGGRAGATE(聚合)

聚合根,对应聚合做持久化模型

限界上下文:划分服务

1.考虑跨聚合引用最简
2.事件风暴

saga

事物保证

与传统的开发模式对比:

最终一致性

业务能力高扩展性

结合事件源的方式,如果业务中新增展示功能,则只需要新加一个topic解决该问题

可用性

天然的读写分离

性能、伸缩性

开发难度

https://blog.csdn.net/aenan/article/details/54928429

限流策略

发表于 2016-12-09 | 阅读次数

限流策略

https://www.cnblogs.com/exceptioneye/p/4783904.html

漏桶算法:

漏桶算法强制一个常量的输出速率而不管输入数据流的突发性,当输入空闲时,该算法不执行任何动作.就像用一个底部开了个洞的漏桶接水一样,水进入到漏桶里,桶里的水通过下面的孔以固定的速率流出,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率.

令牌桶算法:

令牌桶算法的基本过程如下:

每秒会有 r 个令牌放入桶中,或者说,每过 1/r 秒桶中增加一个令牌
桶中最多存放 b 个令牌,如果桶满了,新放入的令牌会被丢弃
当一个 n 字节的数据包到达时,消耗 n 个令牌,然后发送该数据包
如果桶中可用令牌小于 n,则该数据包将被缓存或丢弃

漏桶和令牌桶比较

“漏桶算法”能够强行限制数据的传输速率,而“令牌桶算法”在能够限制数据的平均传输数据外,还允许某种程度的突发传输。在“令牌桶算法”中,只要令牌桶中存在令牌,那么就允许突发地传输数据直到达到用户配置的上限,因此它适合于具有突发特性的流量。

RateLimiter

我们可以使用 Guava 的 RateLimiter 来实现基于令牌桶的流量控制。RateLimiter 令牌桶算法的单桶实现,RateLimiter 对简单的令牌桶算法做了一些工程上的优化,具体的实现是 SmoothBursty。需要注意的是,RateLimiter 的另一个实现 SmoothWarmingUp,就不是令牌桶了,而是漏桶算法。

SmoothBursty 有一个可以放 N 个时间窗口产生的令牌的桶,系统空闲的时候令牌就一直攒着,最好情况下可以扛 N 倍于限流值的高峰而不影响后续请求,就像三峡大坝一样能扛千年一遇的洪水.

12…4
zhang dong

zhang dong

Make my life plan and use my life to perform.

34 日志
48 标签
© 2018 zhang dong
由 Hexo 强力驱动
主题 - NexT.Muse