处于浪潮之巅,互联网的发展
海量 volume
多样 variety
实时 velocity
高并发
高可扩
高性能
举例:
涉及到技术非常广泛,甚至可以说涵盖了整个软件生态:
如操作系统底层调用,中间件 ,数据库存储,web server,UI界面等
何为分布式:
分布式是建立在网络之上的软件系统 ;分布式系统是一组通过网络进行通信,为了完成共同的任务而协调工作的计算机节点组成的系统。
目的:利用更多的机器,处理更多的数据
可扩展性:分布式系统的根本目标就是为了处理单个计算机无法处理的任务,当任务增加的时候,分布式系统的处理能力需要随之增加。简单来说,要比较方便的通过增加机器来应对数据量的增长,同时,当任务规模缩减的时候,可以撤掉一些多余的机器,达到动态伸缩的效果
可用性与可靠性:一般来说,分布式系统是需要长时间甚至7*24小时提供服务的。可用性是指系统在各种情况对外提供服务的能力,简单来说,可以通过不可用时间与正常服务时间的必知来衡量;而可靠性而是指计算结果正确、存储的数据不丢失。
高性能:不管是单机还是分布式系统,大家都非常关注性能。不同的系统对性能的衡量指标是不同的,最常见的:高并发,单位时间内处理的任务越多越好;低延迟:每个任务的平均时间越少越好。这个其实跟操作系统CPU的调度策略很像。
一致性:分布式系统为了提高可用性可靠性,一般会引入冗余(复制集)。那么如何保证这些节点上的状态一致,这就是分布式系统不得不面对的一致性问题。一致性有很多等级,一致性越强,对用户越友好,但会制约系统的可用性;一致性等级越低,用户就需要兼容数据不一致的情况,但系统的可用性、并发性很高很多。
(1)异构的机器与网络
(2)普遍的节点故障
(3)不可靠的网络连接
Nginx:
Nginx(发音同engine x):是异步框架的 Web服务器,也可以用作反向代理,负载平衡器 和 HTTP缓存。 高性能、高并发的web服务器;功能包括负载均衡、反向代理、静态内容缓存、访问控制;工作在应用层
LVS: Linux virtual server,基于集群技术和Linux操作系统实现一个高性能、高可用的服务器;工作在网络层
Java:Tomcat,Apache,Jboss
Python:gunicorn、uwsgi、twisted、webpy、tornado
SOA、微服务、spring boot,django
docker:
Docker是一个开放源代码软件项目,让应用程序部署在软件货柜下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制 Docker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces),来创建独立的容器(containers)。这可以在单一Linux实体下运作,避免引导一个虚拟机造成的额外负担[2]。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,
kubernetes
memcache、redis等
zookeeper、etcd等
zookeeper使用了Paxos协议Paxos是强一致性,高可用的去中心化分布式。zookeeper的使用场景非常广泛,之后细讲。
grpc、dubbo、brpc
dubbo是阿里开源的Java语言开发的高性能RPC框架,在阿里系的诸多架构中,都使用了dubbo + spring boot
消息队列的应用场景:异步处理、应用解耦、流量削锋和消息通讯
storm akka
Hadoop , spark
MySQL Oracle MongoDB HBase
elasticsearch solr
rsyslog elk flume
作为一个后台开发人员所应该掌握的基础知识:基础
编程语言 C++
在具有C语言良好的编程功底下,可以进阶学习CPP语言
《C++ Primer》 CPP的百科全书,圣经级的书,C++语言的方方面面都有涉及
关于本书的学习,以下经验转自知乎
个人经验,C++ primer 第一次可以跳着看。关键是要尽快用起来,在使用中熟练,而不是在细节中迷失。以C++ Primer第五版为例,第一遍读的时候: Part1也就是前七章,除了6.6,6.7节,都要通读。尤其是第三章初步介绍了vector和string,简直就是新手福音,搞定这两个容器就能写一些简单的程序。 Part2基本就是数据结构和算法,如果有基础读起来很轻松。9,11两章介绍的容器,以及12.1节的智能指针要通读。多用智能指针和容器,远离segment fault. 第10章里的泛型算法可以慢慢读,读完以后可以写出高逼格的函数式风格C++。12.2节讲了怎么用new和delete分配空间,题主作为新手,知道这种写法就行,写程序时尽量用容器代替原始数组,尤其是代码里最好不要有delete。Part3是块硬骨头,标题就是Tools for Class Authors. 作为一个"class user",有些部分第一次是可以略过的。13章很重要,要细读。初始化,复制,赋值,右值引用是C++里很微妙很重要的部分,别的语言对于这些概念很少有区分得这么细的。这一章不但要精读,还要完全掌握。14章的操作符重载第一次可以观其大略;14.9节第一次可以跳过。15章讲OOP,重要性不言而喻。如果之前一点概念都没有,学起来会觉得比较抽象。网上关于OOP有很多通俗有趣的文章,可以一起看看。16章讲泛型编程,第一次读16.1节,掌握最基本的函数模板和类模板就行了。Part4就更高档了,很多内容第一次就算啃下来,长久不用又忘了。第一次读推荐把18.2节读懂,命名空间简单易用效果好。别的内容可以观其大略,用时再看。17.1节的tuple是个有趣的东东,可以读一读。17.3节的正则表达式和17.4节的随机数也许有用,也可以读一读。如果需要读写文件,要读一下17.5.2节的raw I/O和17.5.3节的random I/O。最后给题主的建议是,写C++,要尽量避免C的写法。用static_cast而不是括号转换符;用vector而不是C里面的数组;用string而不是char *;用智能指针而不是原始指针。当然I/O是个例外,printf()还是比cout好用的;转换数字和字符串时sprintf()也比stringstream快
《深度探索C++对象模型》深度好书,了解CPP面向对象底层的精品之作
《STL源码剖析》C++大家侯捷著 差不多也是进阶的必读物品,书中内容涉及空间配置器,迭代器,序列式容器,关联式容器,算法等
学习此书的过程中,阅读STL源码自然是必须的: 侯捷有云:“学习过STL源码的人,用起来的虎虎生风之势绝非前两种人可比的!”
《Effective C++:改善程序与设计的55个具体做法》建议快速看一下。
算法与数据结构
需掌握的内容:
数据结构
队列 集合 链表、数组 字典、关联数组 栈 树 二叉树 完全二叉树 平衡二叉树 二叉查找树(BST) 红黑树 B,B+,B*树 LSM 树 BitSet
常用算法
排序、查找算法 选择排序 冒泡排序 插入排序 快速排序 归并排序 希尔排序 堆排序 计数排序 桶排序 基数排序 二分查找
高级算法
布隆过滤器 字符串比较 KMP 算法 深度优先、广度优先 贪心算法 回溯算法 剪枝算法 动态规划 朴素贝叶斯 推荐算法 最小生成树算法 最短路径算法
集中式架构与分布式架构的区别在当今的信息技术领域,选择合适的系统架构是决定一个应用或系统性能、扩展性和可靠性的关键。两种主要的架构模式——集中式架构和分布式架构——各自有着不同的特点和适用场景。本篇文章将详细探讨这两种架构的区别,包括它们的原理、优势与不足,以及应用场景。我们还将通过代码示例来进一步说明它们的不同之处。一、集中式架构1.1 集中式架构的基本概念集中式架构是指所有的计算资源和处理任务
在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。那具体什么是分布式锁,分布式锁应用在哪些业务场景、如何来实现分布式锁呢?为什么要使用分布式锁我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,后来业务发展,需要做集群,一个应用需要部署到几台机器上然后
分布式系统(Distributed System)和集群(Cluster)是两个经常被提及的计算机科学概念,它们在提高系统性能和可靠性方面都扮演着重要角色,很多同学会觉得这俩个是同一种东西,但事实上它们之间有着本质的区别。分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成。在分布式系统中,这些节点可能是物理上分散的,它们之间通过消息传递进行通信和协调。分布式系统的目的
分布式系统的概念分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。随着互联网的飞速发展,用户量急剧增多,互联网产品越来越多样化,内容越来越多,传统的单体结构系统已经无法满足需求,分布式系统就应运而生。分布式系统通过服务化,即SOA架构的方式,采用分而治之的策略,通过业务上的拆分,将海量用户的访问量进行拆分,以满足系统的高可用性,高性能,可伸缩,可扩展的需求。由
1.微服务微服务架构,就是把一个个单独的应用程序开发为一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是Http API。这些服务围绕业务能力来构建,并且通过完全自动化部署机制来独立部署。这些服务使用不同的编程语言书写,以及不同的数据存储技术,并保持最低限度的集中式管理。即:拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行。2.集群、分布式、节点集群是个物理
分布式基础概念1. 微服务2. 集群&分布式&节点3. 远程调用4. 负载均衡5. 服务注册/发现&注册中心6. 配置中心7. 服务熔断&服务降级8. API网关 1. 微服务微服务架构风格,就是把一个单体架构按照业务拆分成多个服务模块,每个模块之间独立部署运行、互不影响,并使用轻量级机制通信,通常是 HTTP API。2. 集群&分布式&节点集群
微服务是架构设计方式,分布式是系统部署方式微服务:就是将一个软件的功能进行拆分,比如某个功能经常使用或经常不使用,可以将该功能单独的设计为一个微服务。通过RPC(远程接口调用,一般通过网络进行调用不是部署在同一台机器的)对该功能进行调用(该句的内容包含了分布式的内容)。微服务之间可以使用不同的语言进行书写。只要按照约定的规范发送请求和接收数据。微服务架构:在做架构设计的时候,先做逻辑架构,再做物理
分布式架构概述分布式概念什么是分布式分布式与集群的关系计算机发展历史分布式架构发展淘宝 去IOE运动架构的发展演变过程什么是大型网站/架构?架构升级单机应用负载均衡数据库的高性能搜索引擎的升级增加缓存服务器数据库的水平垂直拆分抽离服务 减少冗余 中间采用webservice或者dubbo 分布式概念互联网架构的最大的两个特点:高并发,海量数据。 对于企业而言,用户数量是没有上限的。 单位时间内收
一、分布式架构介绍(一)什么是分布式系统分布式系统指一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。通俗的理解,分布式系统就是一个业务拆分成多个子业务,分布在不同的服务器节点,共同构成的系统称为分布式系统,同一个分布式系统中的服务器节点在空间部署上是可以随意分布的,这些服务器可能放在不同的机柜中,也可能在不同的机房中,甚至分布在不同的城市。(二)分布式与集
目录集中式系统架构与分布式系统架构分布式系统架构中的挑战事务分布式事务和数据一致性 集中式系统架构与分布式系统架构集中式系统:由卓越性能的大型主机单机组成的计算机系统,称为集中式系统。特点。单机运算能力强劲,部署结构简单。但是,拥有单点故障,且单机价格昂贵。分布式系统:一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。特点:分布性。多台计算机在空间中任意
背景分布式架构理论的诞生互联网的高速发展,归纳要点如下:高配置的服务器成本太高。应用规模变大,变的复杂起来。性能问题越来越迫切,严重影响了用户的体验,互联网平台是注重用户体验,用户至上。单体应用软件维护成本太高。部署效率低下。代码复用程度低。 定义与术语分布式架构是指由多个能独立部署的子系统基于网络通讯协议,相互协同来完成业务流程的架构模式。网络具有三种状态:成功、失败、超时。 
分布式架构是什么?分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是通过rpc来交互或者是webservice来交互的。逻辑架构设计完后就该做物理架构设计,系统应用部署在超过一台服务器或虚拟机上,且各分开部署的部分彼此通过各种通讯协议交互信息,就可算作分布式部署,生产环境下的微服务肯定是分布式部署的,分布式部署的应用不一定是微服务架构的
一. 分布式架构1. 特点分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统;分布性:组成分布式系统的所有计算机节点都是对等的;并发性:系统中的多个节点同时操作一些共享的资源;缺乏全局时钟:很难定义两个事件究竟谁先谁后;故障总是会发生:组成系统的所有计算机,都有可能发生任何形式的故障;2. 问题通信异常:系统中各个节点间的网络通信可能会伴随着网络不
分布式系统是什么 在讲微服务架构之前,先问个问题什么是分布式系统? 有人会说:“淘宝、京东、美团、滴滴等等”不都是分布式系统吗?虽然没有说错,但从用户的角度,能看出他们是一个分布式的系统吗?分布式系统
在昨天的开发者大会上,鸿蒙的一大亮点就是:“首个真正为全场景时代打造的分布式操作系统”,所以这句专业高大上的话到底是什么意思,我们用“人话”来翻译一下:首先明确一点,以往的操作系统往往是跟随一种特定品类的硬件诞生的,但鸿蒙并不是一个只局限于手机的系统。比如和pc适配的window,和智能手机适配的ios和Android,在对应品类上他们确实能获得更好的体验。可一旦设备形态一变,情况就会不同了。比如
集群是个物理形态,分布式是个工作方式。只要是一堆机器,就可以叫做集群,他们是不是一起协作并不知道。《分布式系统原理与泛型》定义:分布式系统是若干个独立计算的集合,这些计算机对于用户来说就像单个相关系统分布式系统是建立在网络上的软件系统。分布式是指将不同的业务分布在不同的地方。集群指的是将几台服务器集中放在一起,实现同一业务。例如京东是一个分布式系统。众多业务运行在不同的机器,所有业务构成一个大型的
分布式架构解析分布式架构分布式的一致性分布式的计算分布式的切换队列分布式的反熵 分布式架构分布式的一致性在90年代中期,随着大型互联网系统的兴起,这些做法被重新审视。那时,人们开始考虑可用性可能是这些系统最重要的属性,但他们也在为它应该与什么进行交换而挣扎。系统教授Eric Brewer的加州大学伯克利分校,当时Inktomi,带来了不同的交换在主题演讲PODC 2000.1(分布式计算的原则)
1. 为什么要分布式2. 分布式架构带来的挑战3. 提高可靠性的设计3.1 监控设计3.2 一致性设计3.3 重试设计3.4 熔断设计3.5 限流设计3.6 降级设计4. 提高性能的设计4.1 缓存设计4.2 异步设计4.3 数据库设计5. 分布式架构的部署1. 为什么要分布式随着信息化的推进, 不论是 PC 还是 mobile 的用户量都在激增, 单机的性能和可靠性是不可能满足用户的增长需求的.
文章目录一致性Hash算法Hash算法应用场景普通Hash算法存在的问题一致性Hash算法手写一致性Hash算法Nginx配置一致性Hash负载均衡策略集群时钟同步时钟不同步导致的问题集群时钟同步策略分布式ID解决方案分布式调度问题定时任务的场景什么是分布式调度定时任务与消息队列的区别定时任务的实现方式分布式调度框架Elastic-JobSession共享问题Session问题原因分析解决Ses
最近几年,我们一直在谈论各式各样的架构,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等。还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等。面对这么多纷乱的技术,很多团队或是公司都是一个一个地去做这些技术,非常辛苦,也非常累。这样的做法就像我们在撑开一张网里面一个一个的网眼。其实,只要我们能够找到这张网的“纲
要在ROS系统中实现WebSocket传输以向Web应用推送 sensor_msgs::Image数据,可以通过以下步骤实现: 1. 选择合适的WebSocket库 首先,需选择一个合适的WebSocket库。在ROS环境中,经常使用 websocketpp库,这是一个C++库,用于构建WebSoc ...
张量是一个多维数组,可以是标量、向量、矩阵或更高维度的数据结构。在 PyTorch 中,张量(Tensor)是数据的核心表示形式,类似于 NumPy 的多维数组,但具有更强大的功能,例如支持 GPU 加速和自动梯度计算。张量支持多种数据类型(整型、浮点型、布尔型等)。张量可以存储在 CPU 或 GPU 中,GPU 张量可显著加速计算。
最近在写项目时,用到了javacv里的获取视频第一帧的功能,确实很好用。但是后续在进行线上打包部署的时候,发现打包出来的jar包足足有1.09g这么大,导致多部署几次就会把docker磁盘占满,于是打开jar包一看,发现是javacv占了足足800mb有很多都是我们用不到的,于是就进行了删减优化,接下来给大家分享步骤。
大家好,我是煎鱼的朋友草莓。继之前我们在编程语言遭遇的滑铁卢后,经过一段时间的沉淀,今天重新梳理了一下信创现在比较高频见到和允许的组件。希望对大家有所帮助,也便于翻阅。信创是什么信创是一个统称概念,实际是把现有与信息技术相关的行业结合在一起,命名为“信息技术应用创新产业”,简称“信创”。信创包括:基础硬件、基础软件、应用软件、信息安全四大板块。其中,基础硬件主要包括:芯片、服务器/PC、存储等;基