
项目架构
攻城狮项目架构设计开发类文章。
攻城狮Chova
一位有自我修养的攻城狮。
2006年《时代》周刊年度人物,
2008年感动中国组委会特别奖获得者。
展开
-
分布式系统原理Day11-常见的分布式问题
常见的分布式问题分布式基本概念分布式优点分布式缺点CAPBASE分布式消息队列常见问题消息队列幂等性幂等性概念问题场景问题解决消息丢失生产者丢失消息问题解决消息队列丢失消息问题解决消费者丢失消息问题解决分布式基本概念分布式系统是一种分工合作的工作方式若干独立计算机的集合,这些计算机对于用户来说就相当于一个单个系统分布式是指分布在不同地方的系统或者服务,将不同的业务分布在不同的地方,彼此是相互关联的分布式优点宏观层面: 将多个功能模块在一起的功能模块进行拆分,来解耦服务间的调用微观层面:原创 2020-10-05 23:12:55 · 818 阅读 · 0 评论 -
分布式系统原理Day10-CAP理论
CAP定义描述意义分布式系统协议Lease机制Quorum机制两阶段提交协议Paxos协议定义CAP理论: CAP三个字母分别代表了分布式系统中三个相互矛盾的属性:Consistency: 一致性 .CAP理论中的副本一致性特指强一致性Availablity: 可用性. 系统在出现异常时已经可以提供服务Tolerance to the partition of network: 分区容忍. 系统可以对网络分区这种异常情况进行容错处理描述CAP理论指出,无法设计一种分布式协议,使得同原创 2020-07-30 21:03:18 · 405 阅读 · 0 评论 -
分布式系统原理Day09-Paxos协议
Paxos协议基本概念角色流程Proposer处理流程Acceptor流程Paxos协议示例基本概念Paxos协议是少数在工程实践中证实的强一致性,高可用的去中心化分布式协议Paxos协议的流程较为复杂,但是基本思想类似投票过程Paxos协议中有一组完全对等的参与节点 :acceptor这组节点各自就某一件事做出决议,如果某个决议获得了超过半数节点的同意则生效Paxos协议中只要有超过一半的节点正常,就可以工作,就能很好对抗宕机,网络分化等异常情况角色Proposer: 提案者原创 2020-07-30 20:34:16 · 359 阅读 · 0 评论 -
分布式系统原理Day08-多版本并发控制技术MVCC
多版本并发控制技术MVCC基本概念基本思想基本使用SVN基本概念MVCC: Multi-version Concurrent Control多版本并发控制技术MVCC技术最初也是在数据库系统中被提出这种思想并不局限于单机分布式系统,在分布式系统中同样有效基本思想MVCC就是多个不同版本的数据实现并发控制的技术MVCC的基本思想:为每次事务生成一个新版本的数据在读数据时选择不同的版本的数据即可以实现对事务结果的完整性读取基本使用MVCC的基本使用:每个事务都是原创 2020-07-29 21:37:26 · 387 阅读 · 0 评论 -
分布式系统原理Day07-两阶段提交协议
两阶段提交协议基本概念流程描述两阶段提交协调者流程两阶段提交参与者流程两阶段提交协议宕机恢复协调者宕机恢复参与者宕机恢复两阶段提交协议分析基本概念两阶段提交协议是一种经典的强一致性中心化副本控制协议流程描述两阶段提交协议是一种典型的 “中心化副本控制协议”参与的节点分为两类:一个中心化协调者节点coordinatorN个参与者节点participant. 每个参与者节点即为管理数据库副本的节点两阶段提交的思路:第一阶段: 协调者询问所有参与者是否可以提交事务,请参与者投票,所原创 2020-07-29 18:12:29 · 371 阅读 · 0 评论 -
分布式系统原理Day06-日志技术
日志技术基本概念问题背景Redo LogRedo Log的宕机恢复Check PointCheck Point的宕机恢复0/1目录技术0/1目录数据更新流程基本概念日志技术是宕机恢复的主要技术之一日志技术最初使用在数据库系统中在分布式系统的实践中,广泛使用了日志技术做宕机恢复例如BigTable等系统将日志保存到一个分布式系统中进一步增强了系统容错能力问题背景设计一个高速的单机查询系统:将数据全部存放在内存中以实现高速的数据查询,每次更新操作只更新一小部分数据. 比如只更新ke原创 2020-07-28 22:15:22 · 335 阅读 · 0 评论 -
分布式系统原理Day05-Quorum机制
Quorum机制基本约定write-all-read-oneQuorum定义读取最新成功提交的数据基于Quorum机制选择primary副本基本约定更新操作write是一系列顺序的过程通过其余机制确定更新操作的顺序. 比如由primary-secondary架构中的primary决定顺序每次更新操作记为wi. 其中i为更新操作单调递增的序号每个wi执行成功后副本数据都会发生变化,称为不同的数据版本,记为vi假设每个副本都保存了所有历史版本的数据write-all-read-onewri原创 2020-07-28 19:43:06 · 305 阅读 · 0 评论 -
分布式系统原理Day04-Lease机制
Lease机制基于Lease协议的分布式Cache系统Lease机制的分析基于Lease协议的分布式Cache系统问题背景:在一个分布式系统中,有一个中心服务器节点,中心服务器存储,维护着一些数据,这些数据是系统的元数据系统中其余的节点通过访问中心服务器节点读取,修改上面的元数据由于系统中的各种操作都依赖于元数据,如果每次读取元数据的操作都访问中心服务器节点,那么中心服务器节点的性能就会成为系统的瓶颈所以,需要设计一种元数据cache, 在各个节点上cache元数据信息,从而减少对中心服务原创 2020-07-28 12:06:31 · 461 阅读 · 0 评论 -
分布式系统原理Day03-基于副本协议
基于副本协议基本概念中心化副本控制协议primary-secondary协议数据更新流程数据读取方式primary副本的确定与切换数据同步基本概念副本控制协议:按特定的协议流程控制副本数据的读写行为使得副本满足一定的可用性和一致性要求的分布式协议副本控制协议要具有一定的对抗异常状态的容错能力,从而使得系统具有一定的可用性,同时副本控制协议要能提供一定的一致性级别根据CAP原理,要设计一种满足强一致性,且出现在任何网络异常时都可用的副本协议是不可能的.因此,实际中的副本协议总是在可用性,一原创 2020-07-27 19:14:08 · 344 阅读 · 0 评论 -
分布式系统原理Day02-数据分布方式
数据分布方式基本概念哈希方式按数据范围分布按数据量分布一致性哈希副本与数据发布基本概念分布式系统: 利用多台计算机协调解决单台计算机所不能解决的计算,存储问题单机系统和分布式系统最大的区别在于问题的规模,即计算,存储的数据量的区别将一个单机问题使用分布式解决,首先要解决的就是如何将问题拆解为可以使用多机分布式解决,使得分布式系统中的每台机器负责问题的一个子集因为无论是计算还是存储,问题的输入对象都是数据,所以如何拆解分布式系统的输入数据成为分布式系统的基本问题哈希方式哈希分布数据的缺点原创 2020-07-26 10:53:56 · 563 阅读 · 0 评论 -
分布式系统原理Day01-分布式系统基本概念
分布式系统基本概念模型节点异常副本副本一致性强一致性单调一致性会话一致性最终一致性弱一致性指标性能可用性可扩展性一致性模型节点节点是一个完整的,不可分割的整体如果某个程序进程实际上由若干相对独立部分构成,在模型中可以将一个进程划分为多个节点在具体的工程项目中,一个节点往往是一个操作系统上的进程异常机器宕机: 系统最常见的异常之一网络异常:消息丢失,两片节点节点之间彼此完全无法通信,出现网络分化消息乱序,有一定几率不是按照发送时的顺序依次到达目的节点可以使用序列号等机制处理网络原创 2020-07-23 22:02:50 · 372 阅读 · 2 评论 -
Dubbo+Zookeeper项目总结
Dubbo+Zookeeper项目实践创建Github项目群组创建项目的服务模块(用户管理服务)创建Github项目群组创建统一的依赖管理创建通用工具类项目创建通用的领域模型创建通用的数据访问创建数据库生成项目创建通用的静态资源创建项目的服务模块(用户管理服务)创建用户管理服务接口创建用户管理服务提供者创建用户管理服务消费者...原创 2019-09-12 11:35:18 · 360 阅读 · 0 评论 -
微服务架构Day39-Docker容器基础用法
Docker容器基础用法Docker体系结构Docker体系结构The Docker Daemon:Docker Daemon负责监听Docker API请求管理Docker对象:镜像: Image.静态的,不会运行容器: Container.动态的,有生命周期网络: Network容器卷: Volume.持久化存储插件: PluginsThe Docker Cl...原创 2019-12-23 19:40:41 · 667 阅读 · 0 评论 -
微服务架构Day38-Docker容器技术概述
Docker容器技术简介LXC(LinuX Container)namespacescgroupsLXC(LinuX Container)namespaces主机级虚拟化容器级虚拟化:用户空间的隔离:主机域名 - UTS文件系统 - Mount进程调用 - IPC进程树 - PID用户组 - User网络通信 - Network用户空间的隔离通过内核级名称空间...原创 2019-12-12 21:13:02 · 699 阅读 · 0 评论 -
微服务架构Day08-SpringBoot之数据处理
SpringBoot与数据访问SpringBoot的数据处理JDBCSpringBoot的数据处理在数据访问层,无论SQL还是NOSQL,SpringBoot默认采用整合Spring Data的方式进行统一处理.添加大量自动配置,屏蔽很多设置.引入xxxTemplate,xxxRepository来简化我们对数据的访问操作JDBC引入starter:spring-boot-star...原创 2019-08-13 16:29:34 · 559 阅读 · 0 评论 -
微服务架构Day29-Dubbo应用开发
Dubbo应用开发Dubbo应用架构Dubbo负载均衡负载均衡策略Random LoadBalanceRoundRobin LoadBalanceLeastActive LoadBalanceConsistentHash LoadBalance负载均衡配置Dubbo应用架构(init)在Dubbo容器Container中启动start容器上的提供者Provider(init)提供者Pro...原创 2019-09-06 13:27:33 · 331 阅读 · 0 评论 -
微服务架构Day30-Dubbo之服务治理
Dubbo实现服务治理Dubbo+Kryo实现高速序列化Dubbo+Kryo实现高速序列化Dubbo RPC是Dubbo体系中最核心的一种高性能,高吞吐量的远程调用方式,是一种多路复用的TCP长连接调用:长连接: 避免每次调用新建TCP连接,提高调用的响应速度多路复用: 单个TCP连接可交替传输多个请求和响应的消息,降低了连接的等待时间,从而减少了同样并发数的情况下网络连接数,提高了系...原创 2019-09-10 09:22:01 · 392 阅读 · 0 评论 -
微服务架构Day31-Dubbo之持续集成
Dubbo之部署持续集成概念持续集成使用GitLab持续集成持续交付持续部署GitLab RunnerGitLab CIGitLab Runner使用Runner概念服务治理遇到的问题在微服务项目中每个服务都是独立运行的项目不可能对每个项目进行手动部署,涉及到自动化运维的问题持续集成持续集成(Continues Integration,简称CI)持续集成指的是,频繁(一天...原创 2019-09-12 14:30:44 · 454 阅读 · 0 评论 -
微服务架构Day32-Dubbo之持续交付
Dubbo之Jenkins实现持续交付Jenkins基于Docker安装Jenkins配置Jenkins配置JDK&Maven安装动态参数插件(Extend Choice Parameter)使用Jenkins实现持续交付配置Jenkins的GitLab SSH免密登录配置Publish Over SSH持续交付依赖管理项目JenkinsJenkins:开源软件项目基于Java...原创 2019-09-16 10:18:59 · 373 阅读 · 0 评论 -
微服务架构Day33-Dubbo之服务聚合
服务聚合之 API Gateway原创 2019-09-17 13:55:13 · 906 阅读 · 0 评论 -
微服务架构Day34-Dubbo之分布式文件上传
FastDFS实现分布式文件上传FastDFS概念FastDFS文件系统架构上传交互过程下载交互过程FastDFS结合Nginx基于Docker安装FastDFS相关配置文件FastDFS概念FastDFS是开源的轻量级分布式文件系统,实现文件管理, 主要功能:文件存储文件同步文件访问(文件上传,文件下载)解决了大容量存储和负载均衡的问题,特别适合以文件为载体的在线服务:相册网...原创 2019-09-19 10:19:32 · 638 阅读 · 0 评论 -
微服务架构Day35-Dubbo之跨域问题
Nginx解决跨域问题Nginx概念Nginx应用场景HTTP服务器,虚拟主机基于域名的虚拟主机配置基于端口的虚拟主机配置Nginx 反向代理代理服务器代理服务器作用正向代理反向代理反向代理应用Nginx反向代理TomcatNginx负载均衡负载均衡Nginx 实现负载均衡Nginx 解决跨域问题跨域问题同源解决跨域问题方式使用CORS(跨资源共享)解决跨域问题使用JSONP解决跨域问题Nginx...原创 2019-09-19 17:03:18 · 1100 阅读 · 2 评论 -
微服务架构Day36-Dubbo之数据缓存
Redis实现数据缓存创建缓存服务提供者创建缓存服务接口项目创建缓存服务提供者创建缓存服务接口项目创建myshop-service-redis-api项目,该项目只负责定义接口创建项目的pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4...原创 2019-09-20 16:22:06 · 388 阅读 · 0 评论 -
微服务架构Day37-Dubbo之全文搜索
Solr实现全文搜索SolrApache Solr特点SolrSolr是一个可扩展的,可部署,搜索,存储引擎,优化搜索大量以文本为中心的数据库Solr是开源搜索平台,用于构建搜索应用程序建立在Lucene(全文搜索引擎)之上Solr是企业级的,快速的和高度可扩展的,使用Solr构建的应用程序可以提供高性能,但是非常复杂Solr可以和Hadoop一起使用:由于Hadoop处理大量数据...原创 2019-10-08 14:46:34 · 417 阅读 · 0 评论 -
微服务架构Day28-Dubbo
微服务架构之DubboDubbo概念Dubbo的服务治理Dubbo的核心功能Dubbo组件角色组件调用关系说明Dubbo Admin管理控制台Dubbo概念Dubbo是一个高性能,轻量级的RPC分布式服务框架提供了三核心能力:面向接口的远程方法调用(@Resource)智能容错负载均衡Dubbo特点: 按照分层的方式来架构,可以使各个层之间解耦合Dubbo的角色:提供方...原创 2019-09-06 09:25:32 · 421 阅读 · 0 评论 -
微服务架构Day27-Dubbo之Zookeeper
分布式协调框架ZookeeperZookeeper概念Zookeeper的数据模型Znode中的元素Zookeeper基本操作Zookeeper事件通知Zookeeper概念Zookeeper是分布式协调服务,用于管理大型主机,在分布式环境中协调和管理服务是很复杂的过程,Zookeeper通过简单的架构和API解决了这个问题.Zookeeper的数据模型类似数据结构中的树,文件系统中...原创 2019-09-05 11:53:22 · 377 阅读 · 0 评论 -
微服务架构Day26-Dubbo之分布式锁
Dubbo实现微服务架构之分布式锁分布式协调服务分布式锁分布式锁条件分布式锁的实现Redis分布式锁的实现加锁解锁锁超时分布式协调服务Zookeeper是分布式协调服务框架分布式协调技术: 主要用来解决分布式环境当中多个进程之间的同步控制,让进程有序的去访问某种临界资源,防止造成"脏数据"的后果分布式协调技术的核心就是实现分布式锁分布式锁分布式锁: 为了防止分布式系统中的多个进程...原创 2019-09-04 15:36:04 · 1081 阅读 · 0 评论 -
微服务架构Day16-SpringBoot之开发热部署
SpringBoot与开发热部署热部署热部署热部署: 在开发中修改一个Java文件后想要看到效果不得不重启应用,会导致大量时间浪费.希望解决在不重启的情况下,程序可以自动部署热部署实现:模板引擎:在SpringBoot中开发情况下禁用模板引擎的Cache页面模板引擎改变ctrl+F9可以重新编译当前页面并生效Spring Loaded: Spring官方提供的热部署程序,实...原创 2019-08-25 18:08:18 · 348 阅读 · 0 评论 -
微服务架构Day15-SpringBoot之分布式
SpringBoot与分布式分布式应用Zookeeper+DubboZookeeperDubboSpringBoot+SpringCloudSpringCloud分布式应用在分布式系统中,常用zookeeper+dubbo组合SpringBoot推荐使用全栈的Spring,SpringBoot+SpringCloudZookeeper+DubboZookeeperZookeepe...原创 2019-08-25 17:42:57 · 407 阅读 · 0 评论 -
微服务架构Day14-SpringBoot之安全
SpringBoot与安全安全框架Spring Security安全框架shiroSpring Security应用程序的两个主要区域:认证和授权(这两个主要区域是Spring Security的两个目标)认证(Authentication):建立一个声明的主体过程一个[主体]一般是指[用户],[设备]或一些可以[在应用程序中执行动作的其它系统]授权(Authorizat...原创 2019-08-25 15:19:59 · 382 阅读 · 0 评论 -
微服务项目框架技术整理
微服务项目相关技术微服务整体框架API GatewayAPI Gateway两种方式:API Gateway的作用API Gateway的架构Eureka(服务发现框架)Eureka的两个组件ZuulZuul工作原理Zuul的作用Zuul与应用的集成方式RESTfulRESTful的关键RESTful与 RPCRESTful Web 服务的Java框架微服务整体框架开发前后台分离:前台与后台...原创 2019-08-20 14:53:57 · 4784 阅读 · 0 评论 -
微服务架构Day09-SpringBoot原理总结
SpringBoot原理总结几个重要的事件回调机制启动流程几个重要的事件回调机制ApplicationContextInitializerSpringApplicationRunListenerApplicationRunnerCommandLineRunner启动流程创建SpringApplication对象调用initialize(sources)方法创造对象保存主...原创 2019-08-14 16:10:32 · 388 阅读 · 0 评论 -
微服务架构Day06-SpringBoot之Servlet
SpringBoot之嵌入式Servlet容器配置嵌入式Servlet容器注册Servlet三大组件(Servlet,Filter,Listener)配置嵌入式Servlet容器SpringBoot默认使用Tomcat作为嵌入式Servlet容器如何定制和修改Servlet容器相关配置1.在配置文件中定制和修改Servlet容器有关的配置,本质上是使用SpringBoot的默认的嵌入式S...原创 2019-08-07 16:09:12 · 558 阅读 · 0 评论 -
微服务架构Day05-SpringBoot之web开发
SpringBoot之web开发引入项目登录页面国际化登录拦截器RESTfulthymeleaf对公共页面元素抽取列表 CRUD引入项目把html页面放在模板引擎文件夹templates下,这样能使用模板引擎的功能。登录页面国际化国际化:编写国际化配置文件1.编写国际化配置文件,抽取页面需要显示的国际化消息2.SpringBoot自动配置好了管理国际化资源文件的组件 ...原创 2019-08-06 18:47:01 · 455 阅读 · 0 评论 -
微服务架构Day02-SpringBoot入门
SpringBoot介绍SpringBoot父项目spring-boot-starter@SpringBootApplicationSpringBoot父项目<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies&l...原创 2019-08-02 14:25:54 · 378 阅读 · 0 评论 -
微服务架构Day07-SpringBoot之Docker
Docker的使用Docker介绍Docker的核心概念Docker安装Docker命令容器操作Docker介绍开源应用容器引擎Docker支持将软件编译成一个镜像并配置好,就可以直接使用这个镜像了运行中的镜像称为容器,容器的启动是非常快的Docker的核心概念Docker镜像(Images):用于创建Docker容器的模板Docker容器(Container):容器是独立运行...原创 2019-08-08 15:57:47 · 344 阅读 · 0 评论 -
微服务架构Day04-SpringBoot之web开发配置
SpringBoot之web开发概述SpringBoot对静态资源(static-location)的映射规则模板引擎thymeleafthymeleaf使用和语法概述SpringBoot开发:1.创建SpringBoot应用,选中需要的场景模块。2.SpringBoot已经默认将场景模块配置好,只需要在配置文件中指定少量的配置(数据库地址,用户名,密码)就可以运行起来。3.只需要编写...原创 2019-08-05 16:55:49 · 428 阅读 · 0 评论 -
微服务架构Day03-SpringBoot日志slf4j
SpringBoot与日志-slf4j日志框架slf4j的使用SpringBoot日志关系日志使用日志框架日志门面(接口,日志抽象层 )日志实现JCL(Jakarta Commons Logging)、slf4j(Simple Logging Facade for Java)、jboss-logginglog4j、JUL(java.util.logging)、log4j2...原创 2019-08-05 09:56:48 · 412 阅读 · 0 评论 -
微服务架构Day10-SpringBoot之缓存
SpringBoot与缓存JSR107JSR107Java Caching定义5个核心接口:CachingProvider,CacheManager,Cache,Entry,ExpiryCachingProvider:定义了创建,配置,获取,管理和控制多个CacheManager.一个应用可以在运行期间访问多个CachingProviderCacheManager:定义了创建,配置,获取...原创 2019-08-21 14:42:25 · 402 阅读 · 0 评论 -
微服务架构Day11-SpringBoot之消息
SpringBoot与消息消息服务消息服务消息服务中间件可以用来提升系统异步通信,扩展解耦能力消息服务两个重要概念:消息代理(message broker)目的地(destination)当消息发送者发送消息后,将由消息代理接管,消息代理保证消息传递到指定目的地消息队列主要有两种形式的目的地: 队列(queue)-主题(topic)队列(queue): 点对点消息通信(p...原创 2019-08-22 15:07:09 · 341 阅读 · 0 评论