Browsed by
标签:APP

常用的分布式事务解决方案

常用的分布式事务解决方案

閱讀本文約花費: 46 (分鐘)众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行。这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务。但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为“分布式事务”。那么在目前数据库不支持跨库事务的情况下,我们应该如何实现分布式事务呢?本文首先会为大家梳理分布式事务的基本概念和理论基础,然后介绍几种目前常用的分布式事务解决方案。废话不多说,那就开始吧~ 什么是事务? 事务由一组操作构成,我们希望这组操作能够全部正确执行,如果这一组操作中的任意一个步骤发生错误,那么就需要回滚之前已经完成的操作。也就是同一个事务中的所有操作,要么全都正确执行,要么全都不要执行。 事务的四大特性 ACID 说到事务,就不得不提一下事务著名的四大特性。 原子性 原子性要求,事务是一个不可分割的执行单元,事务中的所有操作要么全都执行,要么全都不执行。 一致性 一致性要求,事务在开始前和结束后,数据库的完整性约束没有被破坏。 隔离性 事务的执行是相互独立的,它们不会相互干扰,一个事务不会看到另一个正在运行过程中的事务的数据。 持久性 持久性要求,一个事务完成之后,事务的执行结果必须是持久化保存的。即使数据库发生崩溃,在数据库恢复后事务提交的结果…

Read More Read More

我是如何一步一步监控公司MySQL的每一个操作?

我是如何一步一步监控公司MySQL的每一个操作?

閱讀本文約花費: 11 (分鐘)作为一个程序员,闲下来还是喜欢学习钻研一些新奇的技术,canal就成了很好的研究对象,一不小心就监控了公司MySQL的一举一动的 一、canal是个啥? canal是阿里开发的一款基于数据库增量日志解析,提供增量数据订阅与消费的框架,整个框架纯JAVA开发,目前仅支持Mysql和MariaDB(和mysql类似)。 那什么是数据库增量日志? MySQL的日志种类是比较多的,主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志。而MySQL数据库所发生的数据变更(DML(data manipulation language)数据操纵语言,也就是我们熟悉的增删改),都会以二进制日志(binary log)形式存储。 二、canal原理 在介绍canal原理之前,我们先来回顾一下MySQL主从同步的原理,这或许会让你更好的理解canal的工作机制。 1、MySQL主从同步原理: MySQL主从同步也叫读写分离,可以提升数据库的负载和容错能力,实现数据库的高可用 先来分析一张MySQL主从同步原理图: image 以上图片源自网络,如有侵权联系删除 master节点操作过程: 当master节点数据发生更改后(delete、update、insert,还是创建函数、存储过程等操作),向binary log中写入记录日志,这些记录又叫做二进制日志事件…

Read More Read More

苹果放弃英特尔芯片,为什么会打击美国计算机产业?

苹果放弃英特尔芯片,为什么会打击美国计算机产业?

閱讀本文約花費: 16 (分鐘)今年6月22日,苹果公司在一年一度的全球开发者大会 WWDC 上,宣布彻底放弃英特尔公司(Intel)的 CPU,改用自己设计的 ARM 芯片。 上一篇文章已经分析过了,苹果为什么要这样做。主要原因是,整个苹果战略是围绕移动端(iPhone)构建的,它现在想把移动端和桌面端合成一个生态,自己完全控制所有硬件和软件,不愿再让 CPU 这样的核心部件受制于英特尔了。 今天接着往下谈,这个”换芯”决定有什么后果。 表面上看,这是苹果公司的”家务事”,但是实际上牵动各方的利益,产生一系列的连锁反应,动摇长久以来主导行业的 Wintel 联盟,甚至会影响到美国的竞争优势。 一、英特尔的反应 苹果宣布换芯以后,英特尔仅仅发了一个简短的声明。 “苹果公司与我们有多个业务领域的合作,我们将继续为他们提供支持。……我们相信,基于 Intel 的 PC 将为全球客户提供最佳的体验。” 言下之意,这只是一件小事,不用大惊小怪。市场似乎也同意这种观点,英特尔股价当天小幅下跌,没过几天又涨回去了。 为什么英特尔觉得影响不大? 因为它的利润主要来自服务器 CPU,2019年占到利润总额的一半。个人电脑 CPU 的利润只占到三分之一,而 MacOS 只占全世界桌面操作系统市场的17%,…

Read More Read More

苹果电脑为什么要换 CPU:Intel 与 ARM 的战争

苹果电脑为什么要换 CPU:Intel 与 ARM 的战争

閱讀本文約花費: 12 (分鐘)三个月前,新款 iPad Pro 发布,支持触摸板和鼠标。 上图的黑点就是鼠标。苹果公司显然打算,平板电脑当作笔记本使用。 我们知道,iPad 的操作系统跟 iPhone 是一样的,都是基于 iOS。如果 iOS 可以用于笔记本,就意味着可以跟桌面系统 MacOS 统一了。如果 MacBook 和 iPhone 都用同一个操作系统,App 就能通用了。 苹果公司显然也是这么打算的。几天后的6月22日将举行 WWDC(苹果全球开发者大会)。媒体报道,苹果公司将在那一天宣布,更换 Mac 电脑的 CPU,从 Intel 公司的 x86 架构改成 ARM 架构。 一旦 Mac 跟 iPhone 使用同样架构的 CPU,那就铺平了统一操作系统的道路。操作系统无法通用的最主要原因,就是 CPU 架构不同。 本文回顾苹果公司的 CPU 架构变化历史,帮助大家理解这件事的技术含义,以及未来的影响。 一、CPU 架构是什么 CPU 的全称是”中央处理单元”,它是计算机的核心,计算都由它来完成。但是,CPU 本身只是一个概念,每家芯片公司都有自己的具体实现。 不同的 CPU 设计实现,就称为” CPU 架构”(CPU architecture)。 不同的 CPU 架构有不同的指令集,彼此不通用,这导致运行在上面…

Read More Read More

部署策略对比:蓝绿部署、金丝雀发布及其他

部署策略对比:蓝绿部署、金丝雀发布及其他

閱讀本文約花費: 13 (分鐘)目前,软件开发最大的变化是部署频率。产品团队更早(更频繁)的将产品发布到生产环境。数月或者数年的发布周期变得越来越短 – 对那些构建纯软件产品的人来说更是如此。 现在,使用面向服务的架构和微服务方式,开发者可以设计模块化的代码库。这允许他们同时在代码库中不同的地方编写和部署代变更。 缩短部署周期的业务优势狠明显: 缩短上市时间 客户可以在更短的时间内获得产品价值 客户的反馈也会更快的到达产品团队,这意味着团队可以更快的迭代特性和修复问题 开发人员的整体士气会上升 但是,这种转变也给运维或者 DevOps 团队带来了新挑战。更频繁的部署,意味着已经部署的代码会对站点可用性和客户体验带来负面影响。这就是制定代码部署策略如此重要的原因,因为它可以最大限度的降低产品和客户的风险。 在本文中,我们将讨论不同的部署策略、最佳实践和工具,让你的团队可以更快更可靠的工作。 现代应用的挑战 现代应用通常是分布式的,基于云的。它们可以弹性扩展来满足需求,基于高可用架构更好地容错。这些应用可以使用全托管服务,例如 AWS Lambda 和 Elastic Container Service(ECS) 等平台处理一些运维责任。 这些应用经常频繁部署。例如,移动 app 和 web 应用可能一个月内经历多次更改。有些甚至一天…

Read More Read More

从虚拟机到容器,详谈各种服务虚拟化技术及其应用场景

从虚拟机到容器,详谈各种服务虚拟化技术及其应用场景

閱讀本文約花費: 17 (分鐘) 本文主要梳理了为何需要服务虚拟化技术,服务虚拟化技术的分类,并举例说明了虚拟机技术和容器技术他们的区别与联系,希望对您的学习有所帮助。 前言 近几年容器(Container)、Kubernetes等技术在数据中心、云计算、各互联网公司的业务服务中得到广泛应用,和20世纪60年代就兴起的虚拟机(Virtual Machine,VM)技术一样,容器也是一种服务虚拟化技术(Server Virtualization),但是它更加轻量,同时将焦点从Machine转移到Application,极大提高了开发、测试、生产环境部署的效率,不过其安全性和隔离性比虚拟机稍逊一筹,在一些场景下也无法完全替代虚拟机。本文主要从以下几部分来梳理虚拟机和容器技术,详细讲一下他们的区别与联系。 1.为何需要服务虚拟化技术 2.虚拟化技术分类 3.Host-based server virtualization(虚拟机)架构 4.OS virtualization(容器)架构 5.内核对容器的支持 6.虚拟机技术举例(VMWare ESXi) 7.容器技术举例(Docker Container) 8.虚拟化技术在云平台的应用( Google Cloud Platform, GCP ) 为何需要服务虚拟化技术? 节省硬件资源(机房、服务器、冷却系统等),提高资源利用率:12306…

Read More Read More

docker cheatsheet

docker cheatsheet

閱讀本文約花費: 1 (分鐘)Docker Cheat Sheet Build Build an image from the Dockerfile in the current directory and tag the image docker build -t myimage:1.0 . List all images that are locally stored with the Docker Engine docker image ls Delete an image from the local image store docker image rm alpine:3.4 Share Run Run a container from the Alpine version 3.9 https://www.docker.com/sites/default/files/d8/2019-09/docker-cheat-sheet.pdf List Of Docker Commands: Cheat Sheet Docker CheatSheet | Docker 配置与实践清单 https://cloud.tencent.com/developer/article/1395434 Docker CLI cheatsheet https://devhints.io/docker …

Read More Read More

图解git原理与日常实用指南

图解git原理与日常实用指南

閱讀本文約花費: 25 (分鐘) 本文首先从了解版本控制系统开始介绍,深入git原理 ,接着介绍HEAD、branch、引用的本质以及push的本质 ,最后进行git操作,希望本文对您的学习有所帮助。 缘起 读了“扔物线”老师的小册《Git 原理详解及实用指南》感觉收获良多,于是想写点东西做一个总结,即加深自己的印象也希望能给社区小伙伴一点帮助,写的不对的地方还请多多指导。身为一个初入前端半年的菜鸟,由伊始的只知道git是用来托管代码的工具到逐步了解中央版本控制系统与分布式版本控制系统(git)的原理与区别;从之前只会基本的add、commit、pull、push操作到使用stash、merge、reset方便得不亦乐乎,都得益于对git原理的深入理解,逼话少说,咋们直接进入正题。前方长篇预警… 从了解版本控制系统开始 所谓版本控制,就是在文件修改的历程中保留修改历史,可以方便的撤销(如同文本编辑的撤销操作一般,只是版本控制会复杂的多)之前对文件的修改。一个版本控制系统的三个核心内容:版本控制(最基本的功能),主动提交(commit历史)和远程仓库(协同开发)。 中央式版本控制系统(VCS) 工作模型 1.主工程师搭好项目框架 2.在公司服务器创建一个远程仓库,并提交代码 3.其他人拉取代码,并行开发 4.每个人独立负责一个功能,开发完成提交代码 5.其他人随时拉取代码…

Read More Read More

甲骨文:有史以来最伟大的25个Java应用程序

甲骨文:有史以来最伟大的25个Java应用程序

閱讀本文約花費: 22 (分鐘)作者 | Alexa Morales译者 | 刘雅梦策划 | TinaJava 的故事始于 1991 年,当时 Sun Microsystems 试图将其在计算机工作站市场的领先地位扩展到新兴且发展迅速的个人电子产品市场。几乎没有人预料到 Sun 即将创建的编程语言会使计算大众化,激发了一个全球范围的社区,并成为了一个由语言、运行时平台、SDK、开源项目以及许多工具组成的持久软件开发生态系统的平台。经过 James Gosling 领导的数年秘密开发之后,Sun 于 1995 年发布了具有里程碑意义的“一次编写,随处运行” 的 Java 平台,并将重点从最初的交互式电视系统设计转到了新兴的万维网应用程序上。在本世纪初,Java 就已经开始为从智能卡到太空飞行器的一切制作动画了。 如今,数以百万计的开发人员在使用 Java 编程,Java 仍然在以越来越快的步伐向前发展。在 Java 诞生 25 周年之际,Java Magazine(Oracle 的双月刊)联合 Oracle Java 开发团队,共同撰文回顾 Java 是如何塑造我们这个星球的。 以下是迄今为止,最具创意和影响力的 25 个 Java 应用程序, 包含了从 Wikipedia Search 到美国国家安全局的 Ghidra 等。这些应用包罗万象,覆盖了包括:太空探索、视频游戏…

Read More Read More

Docker中安装Nexus3

Docker中安装Nexus3

閱讀本文約花費: 1 (分鐘)1、拉取nexus3:3.20.0版本的镜像。 BashCopy 2、使用镜像创建nexus3容器,nexus运行默认使用的8081端口,由于我机器上的8081端口已被占用,则用了一个8083端口,执行创建容器命令: BashCopy 3、由于nexus默认使用的8081端口,所以容器启动后,并不能通过 http://localhost:8083 访问,所以必须修改nexus的配置文件,变更为8083端口才可以。进入nexus容器中: BashCopy 4、nexus默认安装在/opt目录下,配置文件路径:/opt/sonatype/nexus/etc 配置文件内容如下,修改端口为8083: BashCopy 5、重启nexus服务 BashCopy 6、nexus启动需要3分钟左右,所以需要耐心等一会,下面已经成功启动进入nexus的界面: 7、nexus3的密码并不是admin123,并是生成在一个文本文件中,文件默认所在目录:/opt/sonatype/sonatype-work/nexus3/admin.password,里面是一串随机密码,通过admin/随机密码串就可以登录nexus了。 8、到此nexus就安装成功了。 Tags: APP, Docker, 容器