摘要: 上次说到了理论,接口层面,数据库层面如何实现高可用,但是,这远远是不够得。为了面对更大的灾害,如:洪水,地震等,还要在机房层面做出高可用。当然,也不仅仅是为了面对自然灾害,也可以是用于备份等,接下来就让我们从存储方式,机房层面说一下高可用架构。 一. 数据存储方式 在我们用集群存储数据的时候,有多种 阅读全文
posted @ 2021-08-17 21:06 编号94530 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 1. 背景 在学习完各种高性能发实现方案后,就需要对三大复杂度一直的高可用进行开刀了,在高可用方面主要有哪些东西是我们需要考虑的呢?接下来将从三个方面逐一分析。 2. 理论 在设计高可用架构理论方面,我们主要有2个方向选择,分别是CAP理论和BASE理论,那什么是CAP,什么是BASE呢? 这个还是 阅读全文
posted @ 2021-08-10 19:43 编号94530 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 上一篇文章初识架构让我们对架构设计的复杂度考虑有了一定了解,主要有个高可用、高性能、可扩展。但仅仅知道是不够用的,接下来,将从高性能来进行详细分享 1. 高性能数据库 从数据库分享高性能,主要是两个方面分别是: 1.1 读写分离 读写分离的主要原理是将读和写分散到不同的节点上 1.1.1 实现方式 阅读全文
posted @ 2021-07-11 18:42 编号94530 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 背景 现在随着微服务的逐渐发展,越来越多的公司开始采用微服务架构,但随之而来的问题是,服务间如何调用,如何还能负载均衡,还必须开箱即用?答案就是Spring的RestTemplate啦(并不一定要使用RestTemplate,也不一定要是微服务架构,涉及到Http调用的服务,方式都可以,我这个是为了 阅读全文
posted @ 2021-06-22 20:23 编号94530 阅读(2290) 评论(0) 推荐(0) 编辑
摘要: 由于各种原因,好久没有写文章了。最近学习了一下架构设计方面的知识,拿来和大家分享一下。 1. 架构是什么 架构是什么,大家能都说出一二,每个人对架构的理解又不尽相同。但对于架构,我们有几个模糊相似的概念需要知道,分别是:系统与子系统,模块与组件,框架与架构。来说说这几种概念的区别。 1. 系统与子系 阅读全文
posted @ 2021-06-14 11:44 编号94530 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 1. 背景 在公司对项目进行拆分,用consul做注册中心。既然弄注册中心了, 那就得远程调用,那就得整上OpenFeign进行远程调用,你说是不? 不能说就搞个RestTemplate+服务名调用吧?想法有了,说动就动,就对项目就行拆分,在拆分的过程中,就把我学到的拿出来和大家分享分享。(我也是第 阅读全文
posted @ 2020-11-19 22:42 编号94530 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 1. 背景 接着上次的说,Nacos问题的分析。这次就来分享一下自己的分析方法。以及如何利用Spring事件完成服务注册。 2. 分析一下 2.1 问题分析过程 问题是这样的,我以为是Nacos服务注册不上吗? 那就肯定是注册有问题了, 那就去找是服务是如何注册的。 关键是从哪找呢?具体步骤: 知道 阅读全文
posted @ 2020-09-19 22:59 编号94530 阅读(1492) 评论(0) 推荐(0) 编辑
摘要: 1. 背景 为啥突然想到写这个?起因就是看到了Nacos的#3757 ISSUE,理解错误, 以为是服务启动,没有注册上服务,实际namespace不同,导致服务无法注册。 但这丝毫不影响再去研究了一波代码,顺便也看到了Nacos是如何利用Spring的事件来进行服务注册的。分享一波,欢迎大家学习指 阅读全文
posted @ 2020-09-13 22:44 编号94530 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 1. Rust的特征与泛型 1.1 先上特征代码: use std::boxed::Box; // 定义一个特征 pub trait Animal{ fn bark(&self); } pub struct Dog{ pub name: String, } pub struct Chicken{ p 阅读全文
posted @ 2020-08-16 14:12 编号94530 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 1. 怎么创建线程 我们都知道Java中通过实现Runnable接口或继承Thread类,来完成一个线程的创建,那么在Rust中是如何实现一个线程的呢?代码如下。 fn how_to_create_a_thread(){ // 创建一个线程 let thread_handle = thread::s 阅读全文
posted @ 2020-07-17 21:36 编号94530 阅读(1911) 评论(0) 推荐(0) 编辑