架构

yum相关变量浅析

耗尽温柔 提交于 2019-12-11 20:28:46
问题背景 同事发现一台centos7机器的yum repo不能使用,现象为相关的repo的meta文件下载失败,提示相关meta文件的下载路径有问题。 问题分析 通过终端输出的报错,发现是/etc/yum.repos.d/*.repo配置文件中\$releasever变量没有加载到正确的值。我们下面先看看yum几个主要变量的作用和设置方法。 yum相关变量 $arch 作用:标识cpu的架构,如i386,i486,i586等 默认取值:默认根据cpu架构自动取值 设置方法: 在/etc/yum/vars/arch文件写入一个值,这个值就是这个变量的值(优先级高) $basearch 作用:标识cpu的基本架构。例如i486和i586等使用一个基本架构i386,AMD64和Intel64有一个基本的架构x86_64。 默认取值:默认根据cpu架构自动取值 设置方法:在/etc/yum/vars/basearch文件写入一个值,这个值就是这个变量的值(优先级高) $releasever 作用:标识操作系统的版本号。 默认取值:先查找/etc/yum.conf配置文件中distroverpkg配置的value,然后取得value对应的rpm包名,最后获取到这个rpm包的release版本号就是这个变量的值(如果是centos系统

什么是微服务,为什么要使用微服务架构

ⅰ亾dé卋堺 提交于 2019-12-11 18:26:56
前言 最近这几年微服务比较火,很多技术公司对招聘java工程师,都是以有微服务架构开发经验的求职者优先,仿佛不谈点微服务相关的技术,都显得不是那么主流了。 一:什么是微服务 1、 微服务的概念源于2014年3月Martin Fowler所写的一篇文章“Microservices”( http://martinfowler.com/articles/microservices.html )。 2、微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。 3、如果要用比较通俗的解释,我觉得可以用如今手机行业的手机生产制作来形容,如今各个手机厂商每台手机几乎都是各大厂商技术的集合体,就比如一台小米手机,cpu可能来自高通,屏幕来自三星,摄像头来自索尼等等,手机每个部分都由不同厂商提供,强强联合,才能制作一台真正优秀的手机,而微服务就像这样,每个功能点单独完成,最后组成一个强大的项目。 二、为什么使用微服务 提到为什么使用微服务架构就应该先了解一下一体化架构。 1、什么是一体化架构? 答:一体化架构顾名思义,将应用各层打成一个包来部署。为了让代码正常工作,一体化应用的所有组件缺一不可,各部分高度依赖。比如我们常见的普通web项目

微服务架构实践 - 你只懂docker与spring boot就够了吗?

浪尽此生 提交于 2019-12-11 17:02:35
微服务并不是单独存在的,为了更好地实现微服务架构,需要整合许多组件混搭使用,方能打通任督二脉,天下无敌。网上很多大拿讲了微服务治理的内容,也有人单方面讲微服务的,比如spring boot与docker,本文着重于组件选型的较量,也积累了我们团队多次PK的精华;这些组件包括spring boot、spring cloud、docker、服务注册发现、RESTFUL、postman、jenkins、ELK、ETCD等。 背景 随着公司一年多的成长,我们已经开发了数十个项目了,后台有JAVA的有PHP的,为了更好地提升开发与管理效率,各技术大牛小牛们时常进行激烈的PK,碰撞出了许许多多爱的火花,比如其中之一:微服务实践 设计 微服务开发架构.png 只需要有一套BASE微服务,BASE微服务生成业务系统微服务实例,供各个业务系统调用;业务系统不直接调用BASE,只能调用微服务INSTANCE。 问题一:有些人会问,假如有20个业务系统,那就有上百个微服务,这怎么管理得了? 这是运维的问题,让运维去解决,运维使用工具,实际也不算困难,反正执行的都是脚本,不需要手工操作。 问题二:为什么不做成一个saas的微服务,这样就只有不到10个的微服务,就非常容易管理了不是吗? 单点故障影响全局,我们选择了稳定更重要;另外saas的话,为了应对不同行业,会存在过度设计的嫌疑;私有化更容易。 调用逻辑

[SpringCloud]~常用架构分层

◇◆丶佛笑我妖孽 提交于 2019-12-11 15:46:31
目录 常用架构分层 commom(公共业务代码层) config(配置层) controller(控制层) DTO(Data Transfer Object 数据传输对象) mapper(数据持久层) VO(Value Object 值对象) domain/model(数据模型层) service(业务层) Impl(业务实现层) task (定时任务) util(工具类) 常用架构分层 commom(公共业务代码层) 公用的业务处理方法,业务代码 没有feign、Http包时,喜欢将外部调用通用方法也放在此包 config(配置层) 存放相关配置类 swagger2Config RestTemplateConfiguration OkHttpConfig FilePathConfig SpringCacheConfig JacksonConfig ValidatorConfig PageHelperConfiguration controller(控制层) 负责请求转发 接受前端参数传给service层 接受service层的返回结果,传给前端 DTO(Data Transfer Object 数据传输对象) 用于接收前端传递的参数 mapper(数据持久层) 数据持久化 对service层提供数据操作接口 接口对应mybitas中Mapper.xml VO(Value

微服务的演变以及微服务与微服务之间的通信

跟風遠走 提交于 2019-12-11 15:37:55
微服务雏形得形成 首先大家看看四个图: 一、单体架构图 : 这个图不是微服务内容的一个图,相当于它就是一个系统。这个系统包含了6个模块。 第一个是乘客:PASSENGER MANAGEMENT 第二个是出租车司机:DRIVER MANAGEMENT。 第三个是定位:TRIP MANAGEMENT 第四个是通知:BILLING。 第五个是跟踪:NOTIFICATION 第六个是身份认证:PAYMENTS。 下面的图就好比前身的滴滴打车的项目,最前期的一个图。滴滴刚开始做的时候也是一个单体的架构。并没有想到自己做那么大,只是一个单体的项目。单体的项目设计主要是它把所有的模块融入到一个系统 里面去进行实现。这么多的模块共享了一个数据库,针对现在滴滴打车,滴滴公司越来越大,用户的群体也越来越大。一个数据库肯定做不了。它必须在数据库这块做相应的集群,做相应的负载等等做一些相关的操作,现在的滴滴如果用一个数据库的话,做起来非常的困难,这就是 单体架构瓶颈的问题,在架构中我们是无法去解决它。 在往下面看的话:PASSENGER:是个乘客,DRIVER:是个司机,比如说乘客下了一个订单,然后这个司机和乘客调用的是同一个RESTAPI,通过rest方式提供的API。我知道这个API,就知道了调用哪个模块了。REST API没有任何的隐蔽性,针对于安全来说是无法做到的,这里没有提供任何网关的形式的

【论文阅读】An Empirical Study of Architectural Decay in Open-Source Software

喜你入骨 提交于 2019-12-11 14:55:25
这篇文章是我学习 软件架构与中间件 课程时分享的论文。可以说,这篇文章塑造了我基本的科研观,也养成了我如今看论文的习惯。感谢老师们,也感谢恒恒对我的帮助。 论文地址: https://ieeexplore.ieee.org/document/8417151 一、 对问题的概述 1.1. 基本概念 架构腐化 (architectural decay)是指软件架构性能随着时间和版本的迭代而逐渐恶化或可维护性递减的现象。软件系统在生命周期内被修改或引入新的决策时,往往产生架构腐化。如图1所示,即为开源项目Chukwa的软件体系结构图,在版本更迭时引入大量依赖,造成架构腐化。 图 1 架构腐化常在版本更迭时产生 架构异味 (architectural smells)则是架构腐化的具体表现,其指的是在架构层次上不良设计决策的实例。其源于对软件架构及抽象(如组件、接口等)的不恰当使用,如表1所示,架构异味可分为如下17个类别。 架构异味的产生将会对系统的可理解性、可测试性和可复用性产生负面的影响,而之前的相关研究多依靠个人经验,缺乏对其影响的实例验证,而本文就将对这一问题进行讨论。 表1 架构异味的分类 1.2. 写作动机 1.2.1. 前人工作的缺陷 整体来看,前人的工作主要依赖于个人经验和小范围案例的研究,结论不具有普遍性。而就其研究方式而言,前人往往着力于用代码异味来表示架构层的问题

MySQL 数据库主从复制架构

て烟熏妆下的殇ゞ 提交于 2019-12-11 13:31:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前文 《MySQL 数据库事务与复制》 分析了 MySQL 复制过程中如何保证 binlog 和事务数据之间的一致性,本文进一步分析引入从库后需要保证主从的数据一致性需要考虑哪些方面。 原生复制架构 MySQL 的原生复制架构原理如上图所示。从库的 I/O Thread 线程负责不断读取主库的 binlog 日志文件并写入本地的 Relay log 临时缓存。从库的 SQL Thread 线程则不断读取 Relay log 重放事件入库。整个过程看起来是比较简单清晰的,但其中有几个点对主从数据一致性有关键影响,我们下面逐一分析。 主从复制的场景下,产生数据不一致的现象有两种: 数据丢失 数据重复 从库的 I/O Thread 是通过网络读取主库的 binlog 的,若出现网络故障,有可能产生数据丢失。为避免网络故障导致的数据丢失,网络恢复后从库重新连接上来需要知道从主库 binlog 的哪个位置重新传输数据。从库需要记住中断发生时 binlog 的位置,并从该断点处重新读取,这个断点我们称为从库的重传检查点。一个可靠的重传检查点必须是在从库读到数据并写入到本地 Relay log 持久化之后才可建立,否则都有丢失数据的可能。 由于主从复制过程的分布式特征,需要保证复制过程的幂等性

一篇文章告诉你什么是架构模式和架构风格

久未见 提交于 2019-12-11 10:36:25
本文探讨如下几个问题: 架构模式和架构风格有区别吗? 什么是架构模式? 什么是架构风格? 架构模式和架构风格的区别是什么? 有哪些架构模式? 有哪些架构风格? 架构模式=架构风格? 如果你搜索「架构模式和架构风格的区别」,你会发现答案千差万别: 有的观点认为架构模式和架构风格是一个东西,只是叫法不同 有的观点认为架构风格是架构模式的外在表现 有的观点认为架构模式和架构风格是不同的两个概念(具体有什么不同,又有不同的观点) 有的观点认为架构模式解决问题,架构风格不解决问题(例如:建房子有建房子的模式,而无论是建成哥特风还是现代风,都还是房子) 有的观点认为架构风格是高层级的架构模式 我个人的观点是: 架构模式是特定问题域下,架构风格的具体应用 ! 我们来一个个的说! 什么是架构模式? 在说架构模式之前,我们先来看看我们常挂在嘴边的设计模式是怎么定义的! GOF在《Design Patterns》这本书的「What is a Design Pattern?」小节,对设计模式下了一个明确的定义: The design patterns in this book are descriptions of communicating objects and classes that are customized to solve a general design problem in a

一文读懂DDD

给你一囗甜甜゛ 提交于 2019-12-11 10:19:16
什么是DDD? ddd不是一种架构风格,而是一种方法论,什么是方法论,每个人按照自己的想法来设计就是一套方法论;ddd是一种业务比较认可,对于微服务拆分的一种方法论。 为什么在微服务的大环境下DDD才流行? 微服务区别于系统,服务是一组想对较小且独立功能单元,是用户感知最小功能集。DDD计的模型中具有边界的最小原子是聚合,聚合和聚合之间由于只通过聚合根进行关联,所以当需要把一个聚合根从一个限界上下文移动到另外一个限界上下文的时候,非常低的移动成本可以很容易地对微服务进行重构。微服务和ddd的理念不谋而合,在微服务的大环境下ddd的流行是趋势。 为什么很多行业在微服务的架构上还是MVC架构? 固化思维,从学校到工作,从学习到开源架构都是采取这种MVC架构; 很多行业是基于传统行业进行项目改造,只是中间件用了微服务相关,但是业务没有明显的拆分依据,换汤不换药; 资源成本,基于ddd的拆分成本比较高,主要体现在事件风暴、领域划分、实体聚合,上下文边界确定;对于企业来说,一个人能搞定的,不需要花大量的人力,时间去做规划; 三层架构属于贫血模型,虽然不符合面向对象编程思想,架构结构比较简单,上手容易。 从技术上来讲DDD和MVC有什么区别? MVC和DDD主要的区别在Service层,主要区别: MVC:Service 实现全量业务逻辑,BO(Business Object)保存业务对象

三种主流芯片架构

本秂侑毒 提交于 2019-12-11 06:03:29
三种主流芯片架构简单比较 三种主流芯片架构   1. ARM ARM是高级精简指令集的简称(Advanced RISC Machine),它是一个32位的精简指令集架构,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。 ARM处理器的主要特点是: (1)体积小、低功耗、低成本、高性能——ARM被广泛应用在嵌入式系统中的最重要的原因 支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件; (2)大量使用寄存器,指令执行速度更快; (3)大多数数据操作都在寄存器中完成; (4)寻址方式灵活简单,执行效率高; (5)指令长度固定。 (6)Load_store结构:在RISC中,所有的计算都要求在寄存器中完成。而寄存器和内存的通信则由单独的指令来完成。而在CSIC中,CPU是可以直接对内存进行操作的。 流水线处理方式。    2. MIPS MIPS架构(英语:MIPS architecture,为Microprocessor without interlocked piped stages architecture的缩写,亦为Millions of Instructions Per Second的相关语),是一种采取精简指令集(RISC)的处理器架构,1981年出现,由MIPS科技公司开发并授权