分布式部署

spring cloud构建全球多租户分布式微服务部署的方案

随声附和 提交于 2019-12-03 04:43:11
最近在用spring cloud分布式微服务云架构做一个全球多租户分布式部署的方案,我在这里只是简单的记录,当前的架构图只能是一个大概的方案,具体实施的方案和细节,IT老铁们可以自己去揣摩,因为业务链不同,细节也就不一样,不说那么多了,直接上图: Spring Cloud大型企业分布式微服务云构建的B2B2C 有spring cloud b2b2c电子商务需求的朋友可以加企鹅求求:一零三八七七四六二六 来源: https://www.cnblogs.com/mingli1245/p/11778131.html

SpringBoot:一二级分布式缓存

梦想的初衷 提交于 2019-12-03 04:03:24
前言 缓存系统的用来代替直接访问数据库,用来提升系统性能,减小数据库负载。早期缓存跟系统在一个虚拟机里,这样内存访问,速度最快。 后来应用系统水平扩展,缓存作为一个独立系统存在,如redis,但是每次从缓存获取数据,都还是要通过网络访问才能获取,效率相对于早先从内存里获取,还是不够逆天快。如果一个应用,比如传统的企业应用,一次页面显示,要访问数次redis,那效果就不是特别好,性能不够快不说,还容易使得Reids负载过高,Redis的主机出现各种物理故障。因此,现在有人提出了一二级缓存。即一级缓存跟系统在一个虚拟机内,这样速度最快。二级缓存位于redis里,当一级缓存没有数据的时候,再从redis里获取,并同步到一级缓存里。这跟CPU的一级缓存,二级缓存是一个道理。当然也面对同样的问题。 缓存概念 Cache 通常有如下组件构成 CacheManager:用来创建,管理,管理多个命名唯一的Cache。如可以有组织机构缓存,菜单项的缓存,菜单树的缓存等 Cache:类似Map那样的Key—Value存储结构,Value部分 通常包含了缓存的对象,通过Key来取得缓存对象 缓存项:存放在缓存里的对象,常常需要实现序列化接口,以支持分布式缓存。 Cache存储方式:缓存组件的可以将对象放到内存,也可以是其他缓存服务器,Spring Boot 提供了一个基于ConcurrentMap的缓存

携程Apollo分布式配置中心部署以及使用

余生长醉 提交于 2019-12-03 01:35:18
理论指导: 参考1 apollo-configservice:提供配置获取接口,提供配置更新推送接口,接口服务对象为Apollo客户端 apollo-adminservice:提供配置管理接口,提供配置修改、发布等接口,接口服务对象为Portal,以及Eureka apollo-portal:提供Web界面供用户管理配置 apollo-client:Apollo提供的客户端程序,为应用提供配置获取、实时更新等功能 参考2 架构剖析 1 架构清晰剖析2 开始部署: https://github.com/ctripcorp/apollo 分布式部署指南 基于docker部署apollo分布式配置中心服务 部署节点,所需的tar包应用包,在apollo的github上下载 test1,192.168.0.133 ,dev test2,192.168.0.134 ,fat 部署步骤 创建ApolloPortalDB数据库 在test-01部署 docker run --restart always -d --name ApolloPortalDB --network yapi_net --ip 172.30.0.21 -v /opt/ApolloPortalDB/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='aaaaaa' -p 3307:3306

helm部署Redis哨兵分布式集群

吃可爱长大的小学妹 提交于 2019-12-03 01:31:46
helm部署Redis哨兵分布式集群 Redis Sentinel集群 介绍 Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。 如下图: Redis Sentinel 故障转移过程: 从这张图中我们能看到主节点挂掉了,原先的主从复制也断开了,客户端和损坏的主节点也断开了。从节点被提升为新的主节点,其它从节点开始和新的主节点建立复制关系。客户端通过新的主节点继续进行交互。Sentinel 会持续监控已经挂掉了主节点,待它恢复后,集群会调整为下面这张图。 一、部署redis哨兵集群 官方chart地址: https://github.com/helm/charts/tree/master/stable/redis-ha 集群说明: By default this chart install 3 pods total: one pod containing a redis master and sentinel container (optional prometheus metrics exporter sidecar available) two pods each containing a redis slave and sentinel containers (optional

分布式全文检索系统SolrCloud简介

十年热恋 提交于 2019-12-03 01:21:29
前言 本文简单描述SolrCloud的特性,基本结构和入门,基于Solr4.5版本。 Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库。Solr是以Lucene为基础实现的文本检索应用服务。 SolrCloud是Solr4.0版本开发出的具有开创意义的基于Solr和Zookeeper的分布式搜索方案,或者可以说,SolrCloud是Solr的一种部署方式。Solr可以以多种方式部署,例如单机方式,多机Master-Slaver方式,这些方式部署的Solr不具有SolrCloud的特色功能。 特色 SolrCloud有几个特色功能: 集中式的配置信息 使用ZK进行集中配置。启动时可以指定把Solr的相关配置文件上传Zookeeper,多机器共用。这些ZK中的配置不会再拿到本地缓存,Solr直接读取ZK中的配置信息。配置文件的变动,所有机器都可以感知到。 另外,Solr的一些任务也是通过ZK作为媒介发布的。目的是为了容错。接收到任务,但在执行任务时崩溃的机器,在重启后,或者集群选出候选者时,可以再次执行这个未完成的任务。 自动容错 SolrCloud对索引分片,并对每个分片创建多个Replication。每个Replication都可以对外提供服务。一个Replication挂掉不会影响索引服务。 更强大的是

redis在分布式中的使用

匿名 (未验证) 提交于 2019-12-03 00:44:02
作者:孤独烟 来自:http://rjzheng.cnblogs.com/ 为什么要用redis :为了并发和性能,使用redis做为缓冲 使用redis有什么缺点 主要是四个问题 (һ) 缓存和数据库双写一致性问题 分析:一致性问题是分布式常见问题,还可以再分为最终一致性和强一致性。数据库和缓存双写,就必然会存在不一致的问题。答这个问题,先明白一个前提。就是如果对数据有强一致性要求,不能放缓存。我们所做的一切,只能保证最终一致性。 另外,我们所做的方案其实从根本上来说,只能说降低不一致发生的概率,无法完全避免。因此,有强一致性要求的数据,不能放缓存。 回答:首先,采取正确更新策略,先更新数据库,再删缓存。其次,因为可能存在删除缓存失败的问题,提供一个补偿措施即可,例如利用消息队列。 (二) 缓存雪崩问题 解决方案 : (一)给缓存的失效时间,加上一个随机值,避免集体失效。 (二)使用互斥锁,但是该方案吞吐量明显下降了。 (三)双缓存。我们有两个缓存,缓存A和缓存B。缓存A的失效时间为20分钟,缓存B不设失效时间。自己做缓存预热操作。然后细分以下几个小点 I 从缓存A读数据库,有则直接返回 II A没有数据,直接从B读数据,直接返回,并且异步启动一个更新线程。 III 更新线程同时更新缓存A和缓存B。 (三) 缓存击穿问题 解决方案: (一)利用互斥锁,缓存失效的时候,先去获得锁

Ceph分布式存储(一)

匿名 (未验证) 提交于 2019-12-03 00:43:02
Ceph分布式存储(一) 一、概述 Ceph是可靠的、可扩展的、统一的、分布式的存储系统。可以同时提供对象存储RADOSGW(Reliable、Autonomic、Distributed、Object Storage Gateway)、块存储RBD(Rados Block Device)、文件系统存储Ceph FS(Ceph Filesystem)3种功能。 2、Ceph应用场景 Ceph可以提供对象存储、块设备存储和文件系统服务,其对象存储可以对接网盘(owncloud)应用业务等;其块设备存储可以对接(IaaS),当前主流的IaaS运平台软件,如:OpenStack、CloudStack、Zstack、Eucalyptus等以及kvm等。 3、ceph功能组件 4、Ceph核心组件 OSD(Object Storage Device): 主要功能包括存储数据、处理数据的复制、恢复、回补、平衡数据分布,并将一些相关数据提供给ceph monitor。例如ceph OSD心跳等。一个ceph存储集群,至少需要两个Ceph OSD来实现active+clean健康状态和有效的保存数据的双副本(默认情况下是双副本,可以调整)。注意:每一个disk、分区都可以成为一个OSD。 Monitor: Ceph的监控器,主要功能是维护整个集群健康状态,提供一致性的决策。 MDS(Metadata

Uber jaeger--一个基于Go的分布式追踪系统

ε祈祈猫儿з 提交于 2019-12-03 00:35:21
Jaeger-Uber开源的一个基于Go的分布式追踪系统 最近因工作需要在研究traing系统,最后选了jaeger,下面是一些总结,同时摘抄了网上的一些资料,并结合自己实践过程中遇到的一些什么问题,欢迎指正,如你也在使用jaeger,或者想使用jaeger,途中遇到什么困难,可发邮件交流:honglouleiyan@163.com 前言 ​ 随着公司的发展,业务不断的增加,模块的不断拆分,系统间业务调用就变得越复杂,对定位线上故障带来很大困难。整个调用链不透明,犹如系统被蒙上一块黑纱,当线上遇到故障时,整个技术部就陷入痛苦的漩涡。这时候分布式追踪系统应运而生,如揭开了黑纱,让阳光照进黑暗。 Opentracing相关文档 官方文档 OpenTracing语义规范(中文版) OpenTracing语义惯例 opentracing文档中文版 ( 翻译 ) 吴晟 分布式追踪系统Jaeger Jaeger 是Uber开发的一套分布式追踪系统,已在Uber大规模使用。并在 2017-9-13 加入CNCF 开源组织 。使用Jaeger可以非常直观的展示整个分布式系统的调用链,由此可以很好发现和解决问题: jaeger架构 jaeger官网网址 https://www.jaegertracing.io/docs / jaeger github地址 https://github.com

大型分布式网站架构设计--第1章 面向服务体系的架构

匿名 (未验证) 提交于 2019-12-03 00:27:02
本章目录: 分布式Java应用图: 分布式Java应用:大型系统会被拆分成多个子系统来实现,对于Java来说,这些子系统可能部署在同一台机器上不同的JVM,或者部署在不同机器上,但是这些子系统之间要进行相互通信来共同实现业务功能。 分布式应用架构的演变 分布式应用架构面临的首要问题,便是如何实现应用之间的远程调用(RPC)。有两种方式:一种是基于HTTP的RPC,一种是基于TCP的RPC。 RPC也就是远程调用,RPC的实现包括客户端和服务端,也就是服务提供方和服务调用方,服务调用方发送RPC请求到服务提供方,服务提供方根据服务调用方的参数执行请求方法,将执行结果返回给调用方,这就是一次RPC请求。 要注意 无论是什么类型的数据,最终都是要转成二进制在网络上传输。 对象的序列化:就是将对象转成二进制流的过程。 对象的反序列化:就是将二进制流转成对象的过程。 Java中的序列化代码: //定义一个字节数组的输出流 ByteArrayOutputStream os= new ByteArrayOutputStream(); //对象的输出流 ObjectOutputStream out = new ObjectOutputStream(os); //将对象写入字节数组输出,进行序列化 out .writeObject(zhangsan); byte [] zhangsanByte=os

CentOS7 下伪分布式Hadoop-hive-kerberos 的整合

匿名 (未验证) 提交于 2019-12-03 00:27:02
环境准备:CentOS7,hadoop-3.1.0,hive-3.0.0,,jdk1.8 默认情况下,hadoop-3.1.0和hive-3.0.0 基本实现伪分布式的部署成功。 安装准备Kerberos 1) yum install -y krb5-server krb5-lib krb5-workstation krb5-server:kdc服务端 krb5-workstation:客户端 2) 修改主机名和域名 hostnamectl set-hostname adcer vim /etc/hosts 127.0.0.1 adcer ::1 adcer 192.168.243.130 adcer vim /etc/sysconfig/network HOSTNAME=adcer 3) 配置/etc/krb5.conf [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false