如何抽取公共服务并成功迁移

2018-08-24
阅读 2 分钟
1.8k
在单体到微服务架构的迁移过程中,我们经常会问一个问题:在什么情况下我需要从单体中剥离一部分出来将其作为一个微服务?答案有很多,其中有一个答案就是:我发现好多单体都有相似的功能,我觉得可以把它抽出来做一个公共服务。

多种认证、授权模型的比较

2018-08-23
阅读 2 分钟
3.6k
原文地址 本文主要列举在如今前后端分离、手机App大行其道的现状下,用户认证、授权的几种做法及对比。 PS. 本文假设你已经理解了各种认证模式的具体细节。 OAuth2.0的几种模式 OAuth2.0是一个被广泛采用的事实标准,它同时包含认证和授权两种模式,我们来看一下它有几种模式: Grant type Client owner User context? C...

K8S Ingress环境下,Http Redirect端口丢失问题

2018-06-28
阅读 3 分钟
6.5k
近日发现一个问题:应用程序在返回Http Redirect的时候丢失了原先访问的端口。比如,我们这样访问http://IP-A:Port-A/app/delete,这个url会响应302,但是它返回的Response header Location里丢失了端口,正确的结果应该是这样:http://IP-A:Port-A/app/index,但返回的却是:http://IP-A/app/index,把端口丢失了。

使用Kubespray安装k8s集群

2018-06-05
阅读 4 分钟
11.1k
给每个node安装好操作系统,Ubuntu 16.04 Server LTS或者CentOS 7,并且有一个可以sudo的用户或者直接有root用户。

面向程序员的网络基本知识 - 子网分割

2018-05-03
阅读 4 分钟
4.3k
本系列文章旨在向程序员分享一些网络基本知识,让程序员具备基本的网络常识,以便与网络工程师沟通。本系列文章不会涉及如何组建网络、如何配置交换机/路由器等硬件相关的内容,所以不适合想考CCNA/HCNA证书的人士。

面向程序员的网络基本知识 - IP地址

2018-05-02
阅读 2 分钟
2.7k
本系列文章旨在向程序员分享一些网络基本知识,让程序员具备基本的网络常识,以便与网络工程师沟通。本系列文章不会涉及如何组建网络、如何配置交换机/路由器等硬件相关的内容,所以不适合想考CCNA/HCNA证书的人士。

面向程序员的网络基本知识 - 网络模型及网络设备

2018-04-28
阅读 3 分钟
3.1k
本系列文章旨在向程序员分享一些网络基本知识,让程序员具备基本的网络常识,以便与网络工程师沟通。本系列文章不会涉及如何配置交换机、路由器等网络设备的内容,所以不适合想考CCNA/HCNA证书的人士。

事务 - Saga模式

2018-03-21
阅读 2 分钟
5.2k
1987年普林斯顿大学的Hector Garcia-Molina和Kenneth Salem发表了一篇Paper Sagas,讲述的是如何处理long lived transaction(长活事务)。听起来是不是觉得和分布式事务很像?没错,下面来看看这个来自1987年的解决方案是如何启发当今的分布式事务问题的。

事务 - TCC模式

2018-03-18
阅读 3 分钟
7.8k
在前一篇文章中讲到了BASE模式,这种模式可以应用在单库or跨库事务的场景下。事实上BASE模式不仅仅局限于数据库层面,还可以应用于分布式系统,这类分布式系统最典型的例子就是电商平台,它们有以下几个特征:

事务 - BASE模式

2018-03-16
阅读 2 分钟
4.2k
事务 - BASE模式 github ACID的局限 在本地事务这篇文章里我们讲到了数据库事务必须保证ACID,在2PC这篇文章里,我们探讨了跨数据库事务是如何保证ACID的。 当数据量越来越大的时候,我们会对将大数据库拆分成若干小库,随着数据库数量越来越多,2PC(及XA)就显得有些捉襟见肘了: 性能低下,2PC协议是阻塞式的。当协调...

事务 - 2PC

2018-03-16
阅读 3 分钟
3.5k
在上一篇文章中我们介绍了本地事务,随着软件复杂度的上升,我们会需要一种可以在多个数据库之间完成事务(分布式事务)的方法,而这个方法也必须能够保证ACID。于是就出现了2PC - Two phase commit protocol。事实上2PC不仅仅适用于多数据库事务场景下使用,也适用于所有支持2PC的参与方(Participants)。

事务 - 本地事务

2018-03-16
阅读 3 分钟
5.6k
事务 - 本地事务 github 什么是本地事务(Local Transaction)?本地事务也称为数据库事务或传统事务(相对于分布式事务而言)。它的执行模式就是常见的: transaction begin insert/delete/update insert/delete/update ... transaction commit/rollback 本地事务有这么几个特征: 一次事务只连接一个支持事务的数据库(...

Elasticsearch中将Doc根据A字段排序获得第一个Doc的B字段值的方法

2018-01-25
阅读 4 分钟
2.1k
注:本文基于Elasticsearch 6.1.2编写 最近遇到这样一个需求,要通过Elasticsearch将Doc根据A字段降序,然后获得B字段的值,最终根据B字段的值再去做Pipeline Aggregation。 先尝试了Max Aggregation,但是Max Aggregation只能获得A字段的最大值。 然后尝试了Top Hits Aggregation,但是Top Hits Aggregation的结果无法...

Spring JMS各组件详解

2018-01-17
阅读 6 分钟
11.2k
在上一篇文章使用Spring/Spring Boot集成JMS的陷阱中讲到了在使用Spring JMS组件时存在这一些性能陷阱,本文会着该文讲解一下Spring JMS的各个组件、它们的作用以及正确使用的方法。

Haproxy反向代理WebSocket的方法

2018-01-10
阅读 1 分钟
10.6k
WebSocket请求和一般的Http请求不一样,它会长时间保持一个connection,Haproxy反向代理WebSocket请求需要用到timeout tunnel参数,否则这个链接可能就会提前关闭。例如:

基于Cookie的Haproxy防止过速请求的方法

2018-01-08
阅读 1 分钟
3.7k
在网上找一些关于Haproxy对于过速防御的解决办法,大致上就找到两种: 对于整体请求速度的控制 对于某个IP的请求速度的控制 这两种方式都不太好,第一种太过粗粒度,第二种容易误伤(如果多个客户端从同一台路由设备过来)。 设想一种基于Cookie的防御方法,因为Cookie里有记录SESSIONID这样的数据,如果针对SESSIONID进...

Nginx反向代理WebSocket响应403的解决办法

2017-12-29
阅读 5 分钟
15.9k
在Nginx反向代理一个带有WebSocket功能的Spring Web程序(源代码地址)时,发现访问WebSocket接口时总是出现403响应,Nginx的配置参考的是官方文档:

Spring MVC异步处理简介

2017-12-21
阅读 7 分钟
8.5k
Spring MVC异步处理简介 Github地址 相关系列文章: Servlet 3.0 异步处理详解 Servlet 3.1 Async IO分析 本文讲到的所有特性皆是基于Servlet 3.0 Async Processing的,不是基于Servlet 3.1 Async IO的。 Callable<?> A Callable<?> can be returned when the application wants to produce the return valu...

Servlet 3.1 Async IO分析

2017-12-18
阅读 6 分钟
6.5k
Github地址 相关系列文章: Servlet 3.0 异步处理详解 Spring MVC异步处理的几种方式 Servlet Async Processing提供了一种异步请求处理的手段(见我的另一篇文章Servlet 3.0 异步处理详解),能够让你将Http thread从慢速处理中释放出来出来其他请求,提高系统的响应度。 但是光有Async Processing是不够的,因为整个请...

Mybatis Mapper.xml继承机制

2017-12-18
阅读 3 分钟
24.5k
利用Mapper.xml的继承机制,我们可以做到ChildMapper覆盖ParentMapper中select、insert、delete、update。下面举例说明:

Servlet 3.0 异步处理详解

2017-12-07
阅读 3 分钟
12.1k
Github地址 相关系列文章: Servlet 3.1 Async IO分析 Spring MVC异步处理的几种方式 Servlet 3.0 开始提供了AsyncContext用来支持异步处理请求,那么异步处理请求到底能够带来哪些好处? Web容器一般来说处理请求的方式是:为每个request分配一个thread。我们都知道thread的创建不是没有代价的,Web容器的thread pool都...

Spring、Spring Boot和TestNG测试指南 - 测试AOP

2017-09-07
阅读 4 分钟
6.4k
Spring提供了一套AOP工具,但是当你把各种Aspect写完之后,如何确定这些Aspect都正确的应用到目标Bean上了呢?本章将举例说明如何对Spring AOP做测试。

Spring、Spring Boot和TestNG测试指南 - 共享测试配置

2017-09-06
阅读 2 分钟
4.7k
在测试代码之间尽量做到配置共用。...能够有效利用Spring TestContext Framework的缓存机制,ApplicationContext只会创建一次,后面的测试会直接用已创建的那个,加快测试代码运行速度。

Spring、Spring Boot和TestNG测试指南 - 测试@Configuration

2017-09-05
阅读 7 分钟
4.6k
在Spring引入Java Config机制之后,我们会越来越多的使用@Configuration来注册Bean,并且Spring Boot更广泛地使用了这一机制,其提供的大量Auto Configuration大大简化了配置工作。那么问题来了,如何确保@Configuration和Auto Configuration按照预期运行呢,是否正确地注册了Bean呢?本章举例测试@Configuration和Auto ...

Spring、Spring Boot和TestNG测试指南 - @TestConfiguration

2017-09-04
阅读 4 分钟
15.3k
@TestConfiguration是Spring Boot Test提供的一种工具,用它我们可以在一般的@Configuration之外补充测试专门用的Bean或者自定义的配置。

Spring、Spring Boot和TestNG测试指南 - @OverrideAutoConfiguration

2017-09-01
阅读 2 分钟
3.9k
除了单元测试(不需要初始化ApplicationContext的测试)外,尽量将测试配置和生产配置保持一致。比如如果生产配置里启用了AutoConfiguration,那么测试配置也应该启用。因为只有这样才能够在测试环境下发现生产环境的问题,也避免出现一些因为配置不同导致的奇怪问题。

Spring、Spring Boot和TestNG测试指南 - @JsonTest

2017-08-31
阅读 4 分钟
4.5k
需要注意的是@JsonTest需要Jackson的ObjectMapper,事实上如果你的Spring Boot项目添加了spring-web的Maven依赖,JacksonAutoConfiguration就会自动为你配置一个:

Spring、Spring Boot和TestNG测试指南 - @ActiveProfiles

2017-08-30
阅读 2 分钟
14k
Github地址 @ActiveProfiles可以用来在测试的时候启用某些Profile的Bean。本章节的测试代码使用了下面的这个配置: {代码...} 例子1:不使用ActiveProfiles 在没有@ActiveProfiles的时候,profile=default和没有设定profile的Bean会被加载到。 源代码ActiveProfileTest: {代码...} 例子2:使用ActiveProfiles 当使用了@...

Spring、Spring Boot和TestNG测试指南 - @TestPropertySource

2017-08-29
阅读 3 分钟
17.4k
同时@TestPropertySource(properties=...)优先级高于@TestPropertySource(locations=...)。

Spring、Spring Boot和TestNG测试指南 - 使用Spring Boot Testing工具

2017-08-28
阅读 5 分钟
13.7k
前面一个部分讲解了如何使用Spring Testing工具来测试Spring项目,现在我们讲解如何使用Spring Boot Testing工具来测试Spring Boot项目。