微服务
文章平均质量分 89
360linker
360linker技术社区的发起人,曾在多家头部互联网公司任职,致力于打造一个帮助我们实现高效技能提升的圈子,分享IT圈内技术、产品、运营、市场等信息。
展开
-
怎么进行数据库分库分表?
一. 数据切分关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。数据库分布式核心内容无非就是数据切分(Sharding),以及切分后对数据的定位、整合。数据切分就是将数据分散存...转载 2019-08-14 17:23:27 · 7126 阅读 · 1 评论 -
什么是服务降级
什么是服务降级服务降级,就是对不怎么重要的服务进行低优先级的处理。说白了,就是尽可能的把系统资源让给优先级高的服务。资源有限,而请求是无限的。如果在并发高峰期,不做服务降级处理,一方面肯定会影响整体服务的性能,严重的话可能会导致宕机某些重要的服务不可用。所以,一般在高峰期,为了保证网站核心功能服务的可用性,都要对某些服务降级处理。服务降级手段拒绝服务判断应用来源,高峰时段拒绝低优先级应用...转载 2018-11-29 14:30:59 · 2790 阅读 · 0 评论 -
使用 Docker 部署 Springboot 应用
介绍一种新的部署方式,让应用部署更加简单高效。对于微服务架构来说,服务拆分的越多,运维的成本也就越高,以前的一个系统只需要部署一次就可以了,但拆分成多个服务后,就需要多次部署了,为了简化部署流程,容器化成了该问题的最佳解决方案。这里假定大家对 Springboot 应用的搭建及 Docker 都有了一定的了解,如果不知道,可以阅读下 SpringBoot实战 之 入门篇 等系列文章及查看 ...转载 2018-11-13 15:31:26 · 188 阅读 · 0 评论 -
高可靠高性能的消息队列怎么去实现?
我们看看RPC调用的场景。服务A调用如图所示服务。在正常情况下,一般都不会有问题。但是在以下情况,服务A调用会遇到问题。问题一:如果有流量高峰,服务B响应超时,会发生什么情况?整个RPC调用链路都会受到影响,甚至发生雪崩。问题二:服务A逻辑复杂,逻辑耦合严重,怎么做拆分?把一些调用链路中可以异步调用的逻辑调整为消费MQ消息。问题三:RPC调用,jar依赖问题?服务B升级,调...原创 2018-09-26 10:14:54 · 919 阅读 · 0 评论 -
微服务网关Zuul, Nginx, Spring Cloud, Linkerd性能对比
过去一段时间,OpsGenie的员工数量和产品特性都经历了快速发展。去年,仅仅是我们的工程师团队就由15人增长到了50人。针对开发团队的划分,我们遵循两个披萨原则[1]将每个团队控制在8个工程师。如你所料的,我们的产品还是一个单体应用。对并行开发的团队来说,CI/CD等过程,开发和运维都是有挑战的。我们跟随当前的技术趋势,正处于单体应用到微服务架构的过渡期。你可以阅读Martin Fowl...原创 2018-09-11 10:41:09 · 927 阅读 · 0 评论 -
tornado 简易教程
引言回想Django的部署方式以Django为代表的python web应用部署时采用wsgi协议与服务器对接(被服务器托管),而这类服务器通常都是基于多线程的,也就是说每一个网络请求服务器都会有一个对应的线程来用web应用(如Django)进行处理。考虑两类应用场景 用户量大,高并发 如秒杀抢购、双十一某宝购物、春节抢火车票 大量的HTTP持久连接 使用同一个...原创 2018-09-10 10:57:24 · 1187 阅读 · 0 评论 -
连接池c3p0 ,Proxool ,Druid ,Tomcat Jdbc Pool对比测试
这次所要做的测试是比较几种我们常用的数据库连接池的性能,他们分别是:c3p0 ,Proxool ,Druid ,Tomcat Jdbc Pool这四种,测试将采用统一的参数配置力求比较“公平”的体现统一水平下几种连接池的不同。 1.创建类TestDAO,封装统一的查询方法 :import java.sql.Connection;import java.sql.Result...转载 2018-09-05 17:51:06 · 706 阅读 · 0 评论 -
spring boot下Servlet容器Tomcat和Undertow性能对比
测试目的:Tomcat和Undertow的性能做对比,确定生产环境调优参数测试工具压测工具:jmeterjvm监控工具:visualvm测试过程:设置jmeter的线程组参数,设置如下:100个线程,每个线程发起100个请求,线程启动间隔是1秒 设置请求参数,这里设置的是http,post请求。 测试tomcat下的性能表现 viusalVm监控结果: jmeter聚...转载 2018-09-05 14:05:52 · 867 阅读 · 3 评论 -
spring boot jar的启动原理分析
1.前言近来有空对公司的open api平台进行了些优化,然后在打出jar包的时候,突然想到以前都是对spring boot使用很熟练,但是从来都不知道spring boot打出的jar的启动原理,然后这回将jar解开了看了下,与想象中确实大不一样,以下就是对解压出来的jar的完整分析。2.jar的结构spring boot的应用程序就不贴出来了,一个较简单的demo打出的结构都是类似...转载 2018-09-04 18:40:59 · 730 阅读 · 0 评论 -
Spring Boot启动原理解析
我们开发任何一个Spring Boot项目,都会用到如下的启动类从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱,我们要从这两位开始就可以了。SpringBootApplication背后的秘密虽然定义使用了多个Annotation...原创 2018-09-04 13:13:08 · 185 阅读 · 0 评论 -
常用的分布式事务解决方案
什么是事务?事务由一组操作构成,我们希望这组操作能够全部正确执行,如果这一组操作中的任意一个步骤发生错误,那么就需要回滚之前已经完成的操作。也就是同一个事务中的所有操作,要么全都正确执行,要么全都不要执行。事务的四大特性 ACID说到事务,就不得不提一下事务著名的四大特性。 原子性 原子性要求,事务是一个不可分割的执行单元,事务中的所有操作要么全都执行,要么全都不执行。 ...原创 2018-08-28 10:54:06 · 141 阅读 · 0 评论 -
微服务架构为何需要搭配API网关?
随着以API为核心的IT项目不断增加,API网关与管理层亦愈发普遍。那么,我们是否应当为微服务搭配API网关?如果需要,其又能够带来哪些助益?API网关是什么?API网关负责提供一套单一且统一的API入口点,其跨越一个或者多个内部API。其通常亦设定了层速率限制与安全性机制。Tyk.io等API管理层则能够带来更多其它功能,包括分析、货币化以及生命周期管理等等。基于微服务的架构当中...原创 2018-08-17 09:52:05 · 340 阅读 · 0 评论 -
Spring Boot启动原理解析
前言前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏。所以这次博主就跟你们一起一步步揭开SpringBoot的神秘面纱,让它不在神秘。正文我们开发任何一个Spring Boot项目,都会用到如下的启动类从上面代码可以看出,Annotation定义(@SpringBootApp...转载 2018-08-26 09:52:47 · 166 阅读 · 0 评论 -
Redis怎么保持缓存与数据库一致性?
将不一致分为三种情况:1. 数据库有数据,缓存没有数据;2. 数据库有数据,缓存也有数据,数据不相等;3. 数据库没有数据,缓存有数据。 在讨论这三种情况之前,先说明一下我使用缓存的策略,也是大多数人使用的策略,叫做 Cache Aside Pattern。简而言之,就是1. 首先尝试从缓存读取,读到数据则直接返回;如果读不到,就读数据库,并将数据会写到缓存,并返回。...转载 2018-08-26 09:42:31 · 39360 阅读 · 3 评论 -
分布式与集群的区别是什么?
1,集群和分布式介绍分布式可繁也可以简,最简单的分布式就是大家最常用的,在负载均衡服务器后加一堆web服务器,然后在上面搞一个缓存服务器来保存临时状态,后面共享一个数据库,其实很多号称分布式专家的人也就停留于此,大致结构如下图所示:这种环境下真正进行分布式的只是web server而已,并且web server之间没有任何联系,所以结构和实现都非常简单。有些情况下,对分布式的需求就...转载 2018-08-26 09:23:12 · 371 阅读 · 0 评论 -
tomcat 负载均衡session共享的三种处理方法
大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。从而提高性能,和吞吐量;但是负载均衡有一个问题就是不同的服务器间进行session共享问题的处理;肯定不可能每分配到一个服务上让用户进行一次登录,这样的用户体验会是极差的;负载均衡采用的是...转载 2018-08-26 09:10:09 · 1182 阅读 · 0 评论 -
Spring RestTemplate中几种常见的请求方式
在Spring Cloud中服务的发现与消费中,当我们从服务消费端去调用服务提供者的服务的时候,使用了一个很好用的对象,叫做RestTemplate,当时我们只使用了RestTemplate中最简单的一个功能getForEntity发起了一个get请求去调用服务端的数据,同时,我们还通过配置@LoadBalanced注解开启客户端负载均衡,RestTemplate的功能不可谓不强大,那么今天我们就...转载 2018-12-13 09:32:57 · 262 阅读 · 0 评论 -
微服务通过EnableFeignClients调用其他服务的api
项目中需要通过当前service服务要调用到其他service服务的api接口时,可通过EnableFeignClients调用其他服务的api,大概的步骤如下:1、在springboot的main处加上注解@EnableFeignClients 1 @EnableDiscoveryClient 2 @SpringBootApplication 3 @EnableFeignCl...转载 2018-12-13 11:21:04 · 2644 阅读 · 1 评论 -
@EnableAsync 异步调用
EnableAsync注解的意思是可以异步执行,就是开启多线程的意思。可以标注在方法、类上。 @Componentpublic class Task { @Async public void doTaskOne() throws Exception { // 同上内容,省略 } @Async public void doTas...转载 2018-12-13 11:22:51 · 595 阅读 · 0 评论 -
我只是下了个订单,鬼知道我在微服务里经历了什么
当我傻啊,用户在电商网站购买成功,还在微服务中,那肯定就是有一套微服务架构的电商系统。设计一套电商系统还不简单简单想象一下,既然是一个电商系统,有用户去购买,就肯定得有一个用户模块,购买什么东西总不是西北风吧,购买肯定是商品吧,省掉购物车,就得有商品模块吧,商品总得有库存吧,库存就暂时跟商品放一起吧,什么仓储物流先别管,就当作是虚拟商品好了,反正题目也没说不能是虚拟商品^_^,购买成功了,...转载 2019-05-22 18:18:29 · 437 阅读 · 0 评论 -
技术选型:Sentinel vs Hystrix
Sentinel是阿里中间件团队研发的面向分布式服务架构的轻量级高可用流量控制组件,于今年7月正式开源。Sentinel 主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户提升服务的稳定性。大家可能会问:Sentinel 和之前经常用到的熔断降级库 Netflix Hystrix 有什么异同呢?本文将从资源模型和执行模型、隔离设计、熔断降级、实时指标统计设计等角度将 Se...转载 2019-05-08 09:21:05 · 251 阅读 · 0 评论 -
Sentinel 成为 Spring Cloud 官方推荐的主流熔断降级方案
摘要:近日,Sentinel 贡献的spring-cloud-circuitbreaker-sentinel模块正式被Spring Cloud社区合并至 Spring Cloud Circuit Breaker,由此,Sentinel 加入了 Spring Cloud Circuit Breaker 俱乐部,成为 Spring Cloud 官方的主流推荐选择之一。近日,Sentinel...转载 2019-05-08 09:13:49 · 475 阅读 · 0 评论 -
Java日志正确使用姿势
摘要:关于日志,在大家的印象中都是比较简单的,只须引入了相关依赖包,剩下的事情就是在项目中“尽情”的打印我们需要的信息了。但是往往越简单的东西越容易让我们忽视,从而导致一些不该有的bug发生,作为一名严谨的程序员,怎么能让这种事情发生呢?所以下面我们就来了解一下关于日志的那些正确使用姿势。前言关于日志,在大家的印象中都是比较简单的,只须引入了相关依赖包,剩下的事情就是在项目中“尽情”的打...转载 2019-05-08 09:11:34 · 168 阅读 · 0 评论 -
阿里的微服务注册中心组件Nacos比 Eureka 更强?
什么是 Nacos?Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用...转载 2019-05-08 09:10:09 · 11807 阅读 · 1 评论 -
istio 是用来做什么的?本文为你解答
如果你比较关注新兴技术的话,那么很可能在不同的地方听说过 Istio,并且知道它和 Service Mesh 有着牵扯。这篇文章可以作为了解 Istio 的入门介绍,了解什么是 Istio,Istio 为什么最近这么火,以及 Istio 能给我们带来什么好处。什么是 Istio?官方对 Istio 的介绍浓缩成了一句话:An open platform to connect, ...转载 2019-05-08 09:05:34 · 1693 阅读 · 0 评论 -
我们经常说的限流应该怎么做?
一、我们为什么需要限流在微服务复杂拓扑的情况下,限流是保障服务弹性和拓扑健壮的重中之重。想一想,如果业务推出了一个秒杀活动,而你没有任何的限流措施;当你搭建了一个账号平台,而完全没有对十几个业务方设定流量配额……这些很有可能在特定场合下给你的产品带来大量的业务损失和口碑影响。我们通常重点关注产品业务层面正向和逆向功能的完成,而对于逆向技术保障,这一点则是企业发展过程中很容易...转载 2019-05-07 14:17:32 · 4994 阅读 · 0 评论 -
分布式锁的几种实现方式
分布式锁的几种实现方式目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数...转载 2019-05-08 14:02:21 · 133 阅读 · 0 评论 -
主流微服务注册中心浅析和对比
前言服务发现是一个古老的话题,当应用开始脱离单机运行和访问时,服务发现就诞生了。目前的网络架构是每个主机都有一个独立的IP地址,那么服务发现基本上都是通过某种方式获取到服务所部署的IP地址。DNS协议是最早将一个网络名称翻译为网络IP的协议,在最初的架构选型中,DNS+LVS+Nginx基本可以满足所有的RESTful服务的发现,此时服务的IP列表通常配置在Nginx或者LVS。后来出现了RP...转载 2019-04-21 20:37:36 · 336 阅读 · 0 评论 -
CodeReview常见代码问题
路线图常见代码问题常见的潜在代码问题是当前直接会导致BUG、故障或者产品功能不能正常工作的类别。空值空值恐怕是最容易出现的地方之一。 常见错误有: a. 值为NULL导致空指针异常; b. 参数字符串含有前导或后缀空格没有Trim导致查询为空。 导致以上结果的原因主要有: 无此记录、有此记录但由于SQL访问异常而没查到、网络调用失败、记录中有脏数据、参数没传。原则上,对于任...转载 2019-02-15 09:14:19 · 248 阅读 · 0 评论 -
互联网服务后台框架的九个要点
对于互联网服务后台团队,开发框架的选择是非常关键的一个问题,多年的海量服务经验和教训使得我们团队深刻的认识到:要尽早规范团队的开发服务框架,避免到了后期,各种开发语言混杂、各类存储组件充斥、重复编码、每个模块形态不统一、文档缺失、监控瘫痪、人员离职造成大量信息丢失,最后积重难返、痛苦不堪。 没有框架来规范,团队的随意性就太大,合作效率就大打折扣,甚至于内耗、反复的挖坑填坑,系统的成败过...转载 2019-01-08 16:56:52 · 290 阅读 · 0 评论 -
浅析DDD(领域驱动设计)
什么是DDD软件开发不是一蹴而就的事情,我们不可能在不了解产品(或行业领域)的前提下进行软件开发,在开发前,通常需要进行大量的业务知识梳理,而后到达软件设计的层面,最后才是开发。而在业务知识梳理的过程中,我们必然会形成某个领域知识,根据领域知识来一步步驱动软件设计,就是领域驱动设计的基本概念。听起来这和传统意义的软件开发没啥区别,只是换了点新鲜的名词而已,其实不然。软件开发 VS DD...转载 2019-01-17 18:29:21 · 1462 阅读 · 0 评论 -
如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
java相关的面试都会问到缓存的问题:缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等不常见的问题,但却是非常重要的问题,今天谈谈这个话题。基本看完这篇,可以对redis有一个比较全面的初步了解,后续我再补充redis相关的实战篇,总结为一个redis系列。01.缓存雪崩数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高...转载 2018-12-25 17:30:41 · 2157 阅读 · 1 评论 -
HSF的原理分析
一.HSF的基本概念HSF全称为High-Speed Service Framework,旨在为淘系的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供或使用公用功能模块,而不用考虑分布式领域中的各种细节技术,例如远程通讯、性能损耗、调用的透明化、同步/异步调用方式的实现等等问题。 二.知识准备通...转载 2018-12-17 17:01:44 · 750 阅读 · 1 评论 -
SpringBoot构建RESTful API——处理返回异常
@ResponseBody 提供了一种很有用的方式,能够将控制器返回的 Java 对象转换为发送到客户端的资源表述。一个好的 REST API 不仅仅能够在客户端和服务器之间传递资源,他还能够给客户端提供额外的数据,帮助客户端理解资源或者在请求中发生了什么情况。发送错误信息到客户端例如,我们为 UserController 中添加一个新的处理器方法,它会提供单个 Spittle 对象。...转载 2018-12-07 09:36:18 · 254 阅读 · 0 评论 -
我们是否应该将数据库也容器化?
将服务容器化的目的有这几个方面:易于构建新环境、易于重新部署(持续集成)、容易水平伸缩(从实践得出)、易于维护环境一致。现在认为数据库不适合容器化,具体原因有一下几点:1. 数据不安全即使你要把 Docker 数据放在主机来存储 ,它依然不能保证不丢数据。 Docker volumes 的设计围绕 Union FS 镜像层提供持久存储,但它仍然缺乏保证。使用当前的存储驱动程序,Do...原创 2018-08-16 13:59:19 · 4300 阅读 · 0 评论 -
RESTFUL URL命名原则
URL命名通常有三种,驼峰命名法(serverAddress),蛇形命名法(server_address),脊柱命名法(server-address)。由于URL是大小写敏感的,如果用驼峰命名在输入的时候就要求区分大小写,一个是增加输入难度,另外也容易输错,报404。蛇形命名法用下划线,在输入的时候需要切换shfit,同时下划线容易被文本编辑器的下划线掩盖,支付宝用的是蛇形命名法,stackove...原创 2018-08-18 10:39:15 · 1746 阅读 · 0 评论 -
高可用的服务注册中心
一、准备工作Eureka can be made even more resilient and available by running multiple instances and asking them to register with each other. In fact, this is the default behaviour, so all you need to do to m...转载 2018-05-29 18:18:16 · 242 阅读 · 0 评论 -
服务链路追踪(Spring Cloud Sleuth)
这篇文章主要讲述服务追踪组件zipkin,Spring Cloud Sleuth集成了zipkin组件。一、简介Add sleuth to the classpath of a Spring Boot application (see below for Maven and Gradle examples), and you will see the correlation data being ...转载 2018-05-29 18:15:33 · 693 阅读 · 0 评论 -
消息总线(Spring Cloud Bus)
Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。本文要讲述的是用Spring Cloud Bus实现通知微服务架构的配置文件的更改。一、准备工作本文还是基于上一篇文章来实现。按照官方文档,我们只需要在配置文件中配置 spring-cloud-starter-bus-amqp ;这就是说我们需要装rabbitM...转载 2018-05-29 18:14:03 · 262 阅读 · 0 评论 -
Spring Boot 自定义starter
创建一个用maven构建的springboot项目pom文件配置如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sche...原创 2018-05-29 18:12:13 · 377 阅读 · 0 评论