3 跨过山河大海

尚未进行身份认证

java android eclipse css spring jsp js springboot

等级
博文 0
排名 0

从 Spring Cloud 看一个微服务框架的「五脏六腑」

SpringCloud是一个基于SpringBoot实现的微服务框架,它包含了实现微服务架构所需的各种组件。注:SpringBoot简单理解就是简化Spring项目的搭建、配置、组合的框架。因为与构建微服务本身没有直接关系,所以本文不对SpringBoot进行展开。另外本文有一些例子涉及到Spring和SpringBoot,建议先了解一下Spring和S...

2019-03-07 11:19:00

Netty 防止内存泄漏措施

1.背景1.1直播平台内存泄漏问题某直播平台,一些网红的直播间在业务高峰期,会有10W+的粉丝接入,如果瞬间发生大量客户端连接掉线、或者一些客户端网络比较慢,发现基于Netty构建的服务端内存会飙升,发生内存泄漏(OOM),导致直播卡顿、或者客户端接收不到服务端推送的消息,用户体验受到很大影响。1.2问题分析首先对GC数据进行分析,发现老年代已满,发生多次Ful...

2019-03-06 11:43:05

ActiveMQ的集群与高可用

一、ActiveMQ的高可用性ActiveMQ使用master-slave模式实现高可用性,提供两种实现主从模式的配置:sharednothing、sharedstorage(arelationaldatabaseandasharedfilesystem)1.sharednothingmaster-slave每一个broker(包括master和slave)都有自己...

2019-03-04 11:18:06

处理Java异常的9个最佳实践

Java中的异常处理不是一个简单的主题。初学者发现它很难理解,甚至有经验的开发者也可以花几个小时讨论如何以及应该抛出或处理哪些异常。这就是为什么大多数开发团队都有自己的一套如何使用它们的规则。如果你是一个团队的新手,你可能会惊讶这些规则与你之前使用的规则有多么不同。尽管如此,大多数团队都使用了几种最佳实践。以下是帮助你入门或改进异常处理的9个最重要的内容。1.在finally块中清理资...

2019-03-02 15:54:39

深入理解Java中的底层阻塞原理及实现

谈到阻塞,相信大家都不会陌生了。阻塞的应用场景真的多得不要不要的,比如生产-消费模式,限流统计等等。什么ArrayBlockingQueue、LinkedBlockingQueue、DelayQueue等等,都是阻塞队列的实现啊,多简单!阻塞,一般有两个特性很亮眼:1.不耗CPU等待;2.线程安全;额,要这么说也OK的。毕竟,我们遇到的问题,到这里就够解决了。但是有没有...

2019-03-02 11:33:19

如何找到 Kafka 集群的吞吐量极限?

Kafka是非常流行的分布式流式处理和大数据消息队列解决方案,在技术行业已经得到了广泛采用,在Dropbox也不例外。Kafka在Dropbox的很多分布式系统数据结构中发挥着重要的作用:数据分析、机器学习、监控、搜索和流式处理,等等。在Dropbox,Kafka集群由Jetstream团队负责管理,他们的主要职责是提供高质量的Kafka服务。他们的一个主要目标是了解Ka...

2019-03-01 17:46:37

Docker 加入裁员大军,关键时期 Docker 将何去何从?

上周,Docker公司传出正在裁员,裁员比例为10%。关于裁员,Docker的发言人说比例达不到这个数,与此同时,Docker还在招聘高管。Docker现任CEOSteveSingh25日表示,虽然最近Docker在裁员,但这是Docker聚焦业务增长的方式。Docker还打算招更多的人,目标是在当前这一财年(截止到2020年1月31日)实现正现金流。...

2019-03-01 11:26:34

Spring源码探究:容器

问题问题描述:项目中发现,自定义切面注解在Controller层正常工作,在Service层却无法正常工作。为了便于分析,去掉代码中的业务逻辑,只留下场景。自定义注解,打印时间 1 2 3 4 5 6 7 8 9 /** *Description:自定义打印时间的注解 ...

2019-02-28 15:35:22

分布式系统常见的事务处理机制

为保障系统的可用性、可靠性以及性能,在分布式系统中,往往会设置数据冗余,即对数据进行复制。举例来说,当一个数据库的副本被破环以后,那么系统只需要转换到其他数据副本就能继续运行下去。另外一个例子,当访问单一服务器管理的数据的进程数不断增加时,系统就需要对服务器的数量进行扩充,此时,对服务器进行复制,随后让它们分担工作负荷,就可以提高性能。但同时,如何保障多个数据节点之间数据的一致以及如何处理分布式事...

2019-02-28 11:07:26

通过源码分析MyBatis的缓存

MyBatis缓存介绍MyBatis支持声明式数据缓存(declarativedatacaching)。当一条SQL语句被标记为“可缓存”后,首次执行它时从数据库获取的所有数据会被存储在一段高速缓存中,今后执行这条语句时就会从高速缓存中读取结果,而不是再次命中数据库。MyBatis提供了默认下基于JavaHashMap的缓存实现,以及用于与OSCache、Ehcache、Hazelcas...

2019-02-27 15:38:27

Spring Cloud构建微服务架构:分布式配置中心

最近正好想发一篇关于配置中心加密的细节内容,结果发现基础的加密解密居然漏了,所以在这个入门系列中补充一下。后面再更新一下,使用配置中心的一些经验和教训。在微服务架构中,我们通常都会采用DevOps的组织方式来降低因团队间沟通造成的巨大成本,以加速微服务应用的交付能力。这就使得原本由运维团队控制的线上信息将交由微服务所属组织的成员自行维护,其中将会包括大量的敏感信息,比如:数据库的账户与密码...

2019-02-27 11:40:57

Dubbo源码解析 — 服务引用原理

前言经过上一篇dubbo源码解析-简单原理、与spring融合的铺垫,我们已经能简单的实现了dubbo的服务引用.其实上一篇中的代码,很多都是从dubbo源码中复制出来,甚至有些类名,变量名都没改.那请问,我为什么要这么做?我认为学习一个框架,无非就三个步骤. 掌握基本使用 看过源码,知道其中原理 临摹源码,自己仿写一个简易的框架 其实大家都清楚,编程这东西,...

2019-02-26 11:18:39

消息中间件Kafka与RabbitMQ谁更胜一筹?

在IM这种讲究高并发、高消息吞吐的互联网场景下,MQ消息中间件是个很重要的基础设施,它在IM系统的服务端架构中担当消息中转、消息削峰、消息交换异步化等角色。 当然,MQ消息中间件的作用远不止于此,它的价值不仅仅存在于技术上,更重要的是改变了以往同步处理消息的思路。比如进行IM消息历史存储时,传统的信息系统作法可能是收到一条消息就马上同步存入数据库,这种作法在小并发量的情...

2019-02-25 17:06:54

Kafka不停机,如何无感知迁移ZooKeeper集群?

Kafka在Yelp的应用十分广泛,Yelp每天通过各种集群发送数十亿条消息,在这背后,Kafka使用Zookeeper完成各种分布式协调任务。因为Yelp 非常依赖Kafka,那么问题来了,它是否可以在不引起Kafka及其他Zookeeper用户注意的情况下切换Zookeeper集群呢?本文将揭晓答案。Kafka在Yelp的应用十分广泛。事实上,我们每天...

2019-02-25 11:23:47

面试题:2018最全Redis面试题整理

1、什么是Redis?Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis与其他key-value缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储...

2019-02-23 11:43:07

深入Spring Boot:快速集成Dubbo + Hystrix

背景Hystrix旨在通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。Dubbo是Alibaba开源的,目前国内最流行的javarpc框架。本文介绍在spring应用里,怎么把Dubbo和Hystrix结合起来使用。SpringBoot应...

2019-02-22 11:37:33

Spring 中获取 request 的几种方法,及其线程安全性分析

概述在使用SpringMVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址、请求的url、header中的属性(如cookie、授权信息)、body中的数据等。由于在SpringMVC中,处理请求的Controller、Service等对象都是单例的,因此获取request对象时最需要注意的问题,便是request对象是否是线程安全的:当有大量并发请求...

2019-02-21 11:46:15

基于 Kafka 实现分布式事件驱动

事件驱动是一种灵活的系统设计方法,在事件驱动的系统中,当数据发生变化时系统会产生、发布一个对应的事件,其它对这个事件感兴趣的部分会接收到通知,并进行相应的处理。事件驱动设计最大的好处在我看来有两点:一是它为系统提供了很好的扩展能力,比如我们可以对某类事件增加一个订阅者来对系统进行扩展,最主要的是我们并不需要修改任何已有的代码,它完全符合开闭原则;二是它实现了模块间的低偶合,系统间各个部分不是强依赖...

2019-02-20 16:21:31

分布式之数据库和缓存双写一致性方案解析

先做一个说明,从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即可。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存。因此,接下来讨论的思路不依赖于给缓存设置过期时间这个方案。在这里,我们讨论三种更新策略:先更新数据...

2019-02-20 11:17:52

Java魔法类——Unsafe应用解析

前言Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序...

2019-02-19 11:16:37
奖章
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得