
分布式微服务
文章平均质量分 95
西红柿系番茄
知其然,知其所以然。
展开
-
Sharding-JDBC实现分库分表和读写分离
在遇到数据量大、性能瓶颈的时候,分库分表和读写分离能够很好解决此类问题。分库分表包括分库和分表两个部分,在生产中通常包括:垂直分库、水平分库、垂直分表、水平分表四种方式。...原创 2021-05-29 13:42:23 · 1222 阅读 · 1 评论 -
如何搭建高性能、高可用、可伸缩、可扩展的网站
本文只是对所读书籍做一些总结,不代表博主的实战经验,#_#一、高性能也叫高并发,主要指标有响应时间、并发数、吞吐量等。1、Web前端方面浏览器:缓存、压缩、合并请求、减少Cookie传输、延迟加载JSCDN、反向代理:缓存静态资源2、应用服务方面使用缓存:本地缓存、分布式缓存、多级缓存尽量异步:MQ、异步方法搭建集群:横向扩展优化编码:多线程、算法、数据结构、对象复用(池化)、GC3、数据库字段优化:类型、建立索引、冗余走索引:执行计划、避免失效缓存原创 2020-05-26 03:58:35 · 801 阅读 · 0 评论 -
SpringBoot2.x整合携程Apollo配置中心
参考博客:https://blog.youkuaiyun.com/aaronsimon/article/details/83657612一、背景对于传统的单体应用,通常使用配置文件管理所有配置。比如Spring Boot开发的单体应用,配置内容可以放在application.yml文件,需要切换环境的话可以设置多个Profile并在启动应用时指定spring.pfofiles.active={prof...原创 2019-02-24 14:48:44 · 4036 阅读 · 1 评论 -
初识RPC
一、应用的架构演进更详细的相关内容介绍,请参考大型网站的架构。单一应用架构:管理部署简单,无法支撑复杂的业务体系。垂直应用架构:解决了单一应用架构面临的扩容问题,不同系统之间存在重叠的业务。分布式应用结构:核心部分抽取出来作为单独的系统对外提供服务,达成业务之间的相互复用。应用架构的演进分布式应用架构所面临的首要问题,便是如何实现应用之间的远程调用(RPC)。 二、什...原创 2019-01-07 23:18:02 · 1334 阅读 · 1 评论 -
自己动手写RPC框架
在上一篇博客中,介绍了RPC的主要概念和实现原理,然后基于TCP协议实现了一个非常简单的RPC小案例(点此回顾)。现在,自我挑战一下,动手写一个RPC框架。高能预警:本文涉及到的知识点如下Spring Boot2:起步依赖、自动配置,让应用开发变得简单 Spring的Java Bean配置,条件注解:灵活控制注入 基于JDK接口的动态代理(了解一下?):发起远程调用对服务消费者来说...原创 2019-01-13 02:08:02 · 3975 阅读 · 18 评论 -
Dubbo服务调用过程
之前介绍了Dubbo的整体架构,现在我们来说一下Dubbo的调用过程。直奔主题,先看一下官方的说明节点角色说明:Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。 Monitor: 统计服务的调用次调和调用时间的监控中心。 Container: 服务运行容器。调用关系说明:0. 服...原创 2019-01-05 22:30:47 · 25745 阅读 · 0 评论 -
Dubbo的介绍和架构
一、前言随着互联网的发展,网站应用的规模不断扩大,软件架构也在不断演进(上一篇博客有更详细的介绍点此传送)。单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。 此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。 垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效...原创 2019-01-01 16:38:44 · 4213 阅读 · 0 评论 -
大型网站的架构
一、大型网站的软件系统的特点高并发,大流量 高可用 海量数据 用户分布广泛,网络情况复杂 安全环境恶劣 需求快速变更,发布频繁 渐进式发展二、大型网站的架构演化发展历程1、初始阶段的网站架构最开始网站的应用程序、数据库、文件等所有的资源都在一台服务器上。最典型的就是LAMP技术了:服务器操作系统使用Linux,应用程序使用PHP开发,数据库使用MySQL,然后部署在Apa...原创 2019-01-01 13:28:14 · 7816 阅读 · 3 评论 -
ZooKeeper的主要功能和原理
本文转自:https://blog.youkuaiyun.com/weijifeng_/article/details/79775738一 、Zookeeper功能简介ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现。分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、配置维护...转载 2018-12-31 20:46:01 · 2077 阅读 · 0 评论 -
基于ZooKeeper实现分布式锁(公平和非公平两种形式)
关于ZooKeeper,上一篇博客有更详细的介绍(传送门)。一、分布式锁在同一个jvm进程中时,可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题,但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候,juc包的锁就无能无力了,这时候就需要分布式锁了。 常见的分布式锁实现方式有Redis的SETNX和GETSET函数,数据库锁,zk的数据节点和监听事...原创 2018-12-31 21:54:19 · 3380 阅读 · 1 评论 -
Spring-Boot2整合Dubbo
最近Dubbo又重新开始了维护,并且提供了和Spring-Boot整合的Dubbo-Starter。作为Dubbo的忠实使用者,真的是感动啊!这不,赶紧搭建个小Demo来爽了一把。一、项目结构我们一共搭建3个模块,common模块定义了服务提供者和服务消费者都需要使用的实体类和服务接口,provider模块定义了服务接口的具体实现,consumer模块定义了一个控制器并注入服务使用。...原创 2019-01-02 13:23:50 · 1327 阅读 · 0 评论 -
Redis分布式锁
先看一个例子:在商品秒杀活动中,多个线程一起进行下单,它们首先查询库存数量,接着判断是否符合条件,然后保存订单信息,最后将库存数量减一后更新到数据库。在这个过程中,存在着共享资源(库存数量),而且一系列的操作没有原子性(每个环节之间都可能被其它线程抢走了CPU执行权)。所以,就存在着线程安全问题,表现出来的结果通常就是“商品超卖”。下面我们用代码模拟一下这个场景:1、定义两种商品1和2,并...原创 2018-08-05 01:06:05 · 530 阅读 · 0 评论