分布式技术

微服务

本小妞迷上赌 提交于 2020-01-10 03:16:11
什么是微服务 1)一组小的服务(大小没有特别的标准,只要同一团队的工程师理解服务的标识一致即可) 2)独立的进程(java的tomcat,nodejs等) 3)轻量级的通信(不是soap,是http协议) 4)基于业务能力(类似用户服务,商品服务等等) 5)独立部署(迭代速度快) 6)无集中式管理(无须统一技术栈,可以根据不同的服务或者团队进行灵活选择) Spring Cloud是什么鬼? Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包 参考: http://www.ityouknow.com/springcloud/2017/05/01/simple-springcloud.html 来源: CSDN 作者: 清晨细雨~ 链接: https://blog.csdn.net/dream_snow2012/article/details

AI 大规模分布式SGD:瞬间训练完基于ImageNet的ResNet50

非 Y 不嫁゛ 提交于 2020-01-10 02:53:58
论文: https://arxiv.org/pdf/1811.05233.pdf 译文:大规模分布式SGD:瞬间训练完基于ImageNet的ResNet50 摘要 由于 大mini-batch训练的不稳定性 (为什么不稳定?) ,和 梯度同步的开销 ,深度学习分布式训练很难线性扩展到拥有大量GPU的集群。我们通过 控制batch_size 和 label smoothing (这是什么意思?) ,来解决不稳定性。通过 2D-Torus all reduce 算法 来解决梯度同步的开销。2D-Torus all reduce 算法 把GPU按照2D网格的方式组织,并且从不同方向执行通信操作 。这两种技术在NNL中实现了,我们在ABCI集群中,用122秒训练完了基于ImageNet的ResNet50。 介绍 随着数据集和DNN模型的size越来越大,训练模型所需的时间也越来越长。基于数据并行的大规模分布式深度学习是一种减少训练时间的有效手段。但是,大规模分布式训练有两个技术难题。1)大mini-batch训练会导致准确率下降。2)GPU间梯度同步的通信开销。需要一种新方法来解决这两个难题。 在过去的几年,提出了很多技术来解决这两个难题。这些工作利用基于ImageNet的ResNet50来衡量训练效果

分布式定时调度

瘦欲@ 提交于 2020-01-10 01:15:01
分布式定时任务调度系统技术选型–转 Elastic Job 《分布式任务调度平台XXL-JOB》 玩转SpringBoot之定时任务详解 关于异步任务,多线程@EnableAsync@Async saturn 来源: CSDN 作者: Hanyinh 链接: https://blog.csdn.net/weixin_43871678/article/details/103910658

阿里巴巴的26款Java开源项目,赶紧戳…

半腔热情 提交于 2020-01-09 21:06:46
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门: https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ 开源展示了人类共同协作,成果分享的魅力。没有任何一家网络公司可以不使用开源技术,仅靠自身技术发展起来。“取之于开源,用之于开源,才能促进开源的良性发展”,阿里巴巴各个团队将踩过的坑和总结的经验融入到开源项目中,供业界所有人使用,帮助他人解决问题的同时,也促进了行业发展。 1.分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。 地址:https://github.com/spring-cloud-incubator/spring-cloud-alibaba 2.

大规模分布式存储系统原理解析与架构实战-读书笔记1-概述

 ̄綄美尐妖づ 提交于 2020-01-09 16:19:25
大规模分布式存储系统原理解析与架构实战-读书笔记1-概述 Google、Amazon、Alibaba等互联网公司的成功催生了 云计算 和 大数据 这两个热门领域。而无论是云计算,大数据还是其他互联网应用,其后台基础设施的建设主要目标都是构建 低成本、高性能、可扩展、易用 的分布式系统。 分布式存储的概念 大规模分布式存储系统的概念: “分布式存储系统是大量普通PC服务器通过Internet互联,对外作为一个整体提供服务” 分布式存储系统的主要挑战: 数据,状态信息的持久化。要求在自动迁移,自动容错,并发读写的过程中保持一致性。 分布式存储的两个主要技术: 分布式系统 和 数据库 几个问题: 1 数据分布:如何将数据分布到多个服务器而且要数据分布均匀?如果进行跨服务器操作? 2 一致性:如何将数据的多个副本复制到不同服务器?且在异常情况下也能保持数据一致? 3 容错:如何检测到服务器故障?如何自动将出现错误的服务器的数据迁移到其他服务器? 4 负载均衡:新增服务器和集群正常运行中如何实现自动负载均衡?数据迁移过程中如何保证不影响已有服务? 5 事务与并发控制:如何实现分布式事务?如何实现多版本并发控制? 6 易用性:如何设计对外接口使系统容易使用?如何设计监控系统并将系统内部状态暴露给运维人员? 7 如何根据数据的特点设计合理的压缩/解压缩算法

Spring Cloud Alibaba 教程 | 前世今生

﹥>﹥吖頭↗ 提交于 2020-01-09 14:10:32
Spring Cloud Alibaba是什么 先来看一下 官方 是怎么定义Spring Cloud Alibaba的: Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。 从官方的文档可以看出Spring Cloud Alibaba是一个微服务一站式解决方案,提供了对Spring Cloud的标准实现,即包含了多个治理微服务的组件。 我们之前使用Spring Cloud的时候其实是在使用Spring Cloud Netflix的解决方案,使用到了Netflix中大家都非常熟悉的组件:Eureka、Zuul、Hystrix、Ribbon等,下面是Spring Cloud Netflix的官方介绍: Spring Cloud Netflix provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding to the

《大规模WEB服务开发技术》读书笔记(I)

别等时光非礼了梦想. 提交于 2020-01-09 13:55:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、认识服务的规模 注册用户,独立用户 请求数 繁忙时流量 服务器台数 貌似应该有很多其他的指标,以前都听说过,但是从来没有认真分析过,已经上线的系统也没有对此进行过统计和分析! 2、大规模服务中的问题有以下几点: 可扩展性、负载均衡的必要性 一般来说,当一台服务器无法承担负载时,都会采用横向扩展(scale out)或者纵向扩展(scale up)。横向扩展就是通过服务器的数量来分担负载,纵向扩展是通过提高硬件的性能来处理负载。而我们知道,硬件的性能和价格不是成比例的,所以通常采用横向扩展技术!采用横向扩展也会带来问题,如请求如何分配——负载均衡,数据如何同步,网络通信延迟等。 保证冗余性 服务器多了后,故障率也会上升。要么构建稳定的系统,要么构建发生故障时能自动切换以继续运行的系统! 低成本运维的重要性 采用自动化工具。 开发人数和开发方法的变化 如何标准化开发? 考虑下应用程序实现方案? 统一编程语言? 统一库函数和框架? 统一代码规范? 使用版本管理工具管理源代码? 需要有人负责全局的推行。 团队如何管理 应对大规模数据量 数据的流向:磁盘->内存->缓存->CPU。各层的速度差异巨大。 减小数据大小? 分散到多台服务器上? 把数据读取次数降到最低? 3、系统增长战略——最小化开端、预见变化的管理和设计

kubernetes基础——一文读懂k8s

蹲街弑〆低调 提交于 2020-01-08 17:09:14
容器 容器与虚拟机对比图(左边为容器、右边为虚拟机)   容器技术是虚拟化技术的一种,以Docker为例,Docker利用Linux的LXC(LinuX Containers)技术、CGroup(Controll Group)技术和AUFS(Advance UnionFileSystem)技术等,通过对进程和资源加以限制,进行调控,隔离出来一套供程序运行的环境。 我们把这一环境称为“容器”,把构建该“容器”的“只读模板”,称之为“镜像”。   容器是独立的、隔离的,不同容器间不能直接通信,容器与宿主机也是隔离开来的,容器不能直接感知到宿主机的存在,同时宿主机也无法直接窥探容器内部。   虽然容器与宿主机在环境上,逻辑上是隔离的,但容器与宿主机共享内核,容器直接依赖于宿主机Linux系统的内核,这与虚拟机不同,后者是在宿主机的操作系统上,虚拟化一套硬件环境,然后在此环境上运行需要的操作系统。容器技术常用来在宿主机上隔离出环境来部署应用(用容器化技术部署的应用称为 ***“容器化应用”*** ),而虚拟机常用来运行一个与宿主机不同的操作系统,从而运行特定的软件。   容器非常轻量级,无论是启动速度,资源占用情况,灵活性等均优于虚拟机。容器的特性给开发生产提供了非常大的便利: * DevOps理念,开发者可以使用同一个镜像,在开发环境、测试环境和生产环境构建相同的容器

关于分布式系统中雷同集群技术及原理,你知道多少?

我们两清 提交于 2020-01-07 23:16:28
写在前面 在当今信息爆炸的时代,单台计算机已经无法负载日益增长的业务发展,虽然也有性能强大的超级计算机,但是这种高端机不仅费用高昂,也不灵活,一般的企业是负担不起的,而且也损失不起,那么将一群廉价的普通计算机组合起来,让它们协同工作就像一台超级计算机一样地对外提供服务,就成了顺其自然的设想,但是这又增加了软件的复杂度,要求开发的软件需要具备横向扩展能力,比如:Kafka、Elasticsearch、Zookeeper等就属于这一类软件,它们天生都是"分布式的",即可以通过添加机器节点来共同地分摊数据存储和负载压力。 为什么需要集群? 分布在不同区域的计算机,彼此之间通过网络建立通信,相互协作作为一个整体对外提供服务,这就是集群,如果我们开发的系统具备这样的能力,那么理论上就具备无限横向扩容的能力,系统的吞吐量就会随着机器数增加而增长,那么未来当系统出现高负载的时候,就可以很好地应对这种情况。 为什么CAP不能同时满足? 通过上面分析,我们知道实现集群,其实就是采用多台计算机来共同承担和负载系统压力,那么就涉及到多台计算机需要参与一起处理数据,为了保证可用性,一般都会在每台计算机上备份一份数据,这样只要有一个节点保持同步状态,那么数据就不会丢失,比如kafka分区多副本、Elasticsearch的副本分片,由于同一数据块及其副本位于不用的机器,随着时间的推移,再加上不可靠的网络通信

不为人所知的分布式锁实现全都在这里了!

◇◆丶佛笑我妖孽 提交于 2020-01-07 20:52:39
1、引入业务场景 首先来由一个场景引入: 最近老板接了一个大单子,允许在某终端设备安装我们的APP,终端设备厂商日活起码得几十万到百万级别,这个APP也是近期产品根据市场竞品分析设计出来的,几个小码农通宵达旦开发出来的,主要功能是在线购物一站式服务,后台可以给各个商家分配权限,来维护需要售卖的商品信息。 老板大O :谈下来不容易,接下来就是考虑如何吸引终端设备上更多的用户注册上来,如何引导用户购买,这块就交给小P去负责了,需求尽快做,我明天出差! 产品小P :嘿嘿~,眼珠一转儿,很容易就想到了,心里想:“这还不简单,起码在首页搞个活动页... ”。 技术小T: 很快了解了产品的需求,目前小J主要负责这块,找了前端和后端同学一起将活动页搞的快差不多了。 业务场景一出现 : 因为小T刚接手项目,正在吭哧吭哧对熟悉着代码、部署架构。在看代码过程中发现,下单这块代码可能会出现问题,这可是分布式部署的,如果多个用户同时购买同一个商品,就可能导致商品出现 库存超卖 (数据不一致) 现象,对于这种情况代码中并没有做任何控制。 原来一问才知道,以前他们都是售卖的虚拟商品,没啥库存一说,所以当时没有考虑那么多... 这次不一样啊,这次是售卖的实体商品,那就有库存这么一说了,起码要保证不能超过库存设定的数量吧。 小T大眼对着屏幕,屏住呼吸,还好提前发现了这个问题,赶紧想办法修复,不赚钱还赔钱