技术_技术面面 - CSDN
  • H.264/AVC是目前业界应用为广泛的视频压缩编码标准,包含了先进而且较为成熟的视频编码技术。本课程将从原理、标准和实现等多个角度,详细讲述了H.264/AVC视频编码标准的整体架构与技术细节,不但讲解了H.264/AVC...
  • 本文转载自公众号 吃草的罗汉 文中的“我”并非小灰,而是原文作者。 熟悉我的人都知道,我有位从事猎头工作的老婆,平时的工作是专为某些医疗、金融投资机构提供中、高级岗位职位人才招聘及相关咨询服务。...

    本文转载自公众号  吃草的罗汉

    文中的“我”并非小灰,而是原文作者。

    熟悉我的人都知道,我有位从事猎头工作的老婆,平时的工作是专为某些医疗、金融投资机构提供中、高级岗位职位人才招聘及相关咨询服务。

    相比之下,这项工作对业务专业性与人脉关系要求较高,经常会被行业大咖问:“这家公司你觉得怎么样?和某某公司比,你觉得他们之间区别是啥?”

    如果回答的不够专业,或者被对方感觉很水,不仅当场尴尬,而且会在信任上大打折扣。

    对猎头这项工作来说,一旦失去了信任,就意味着确定性的消失,长此以往,这个圈子也就别想混了。

    上周,我妻子手上的某候选人,在通过初试、复试后,最终被卡在了终面上。

    这种高端VP岗位的夭折,显然让她十分郁闷。

    我本想安慰她,没想到被瞪了一眼,说:“少跟我提这事!煮熟的鸭子都飞了,几十万佣金啊,就这么飞了!”

    我一哆嗦,感受到怨愤之气已冲破了天空,立马话锋一转,“胜败乃兵家常事,没事的。”

    “去你的兵家常事!我真火大着呢,少惹我!”

    我很理解,毕竟业务的发展非常艰难,这给她的情绪带来了压力,笑了笑说:“好吧。那为什么终面被拒呢?”

    “现在的客户真难伺候,招的是VP,问的全是与细节相关的问题,最终,候选人抱怨企业小瞧了他,企业则吐槽这哥们很水。”

    她喝了口茶,抬起头问我。

    “好像在你们技术圈里,这种事情还挺多见?”

    这样的话题,曾经在技术圈内也争论了过一阵子。

    我试图用几个例子来向他解释,还别说,这方面可是我的强项。

    比如,当团队规模超过几十人以上,而且不止一条产品线,那就需要有一名技术总监来管理和协调各个产品线Leader,并负责搭建公共技术平台,提升开发效率,控制质量,并降低成本。

    再比如,当团队规模超过上百人时,才有设立CTO的必要,毕竟到这个研发规模规模级别了,就要有专门的团队做技术应用创新探索和前沿技术预研,而且要和技术平台团队、应用研发团队形成很好的联动作用,让创新原型试点能够很平滑的融入商业平台再让应用研发线规模化的使用起来……

    说到这,我老婆朝我摆了摆手,示意我停下来。

    “你这套说词演练了几次了?少拿演讲的套路来糊弄我,这种 ‘胡子眉毛一把抓’ 的理论根本没意义。”,她继续说,“我也常和技术领域的猎头聊天,你先歇一歇,还是我先说说自己的看法吧。”

    中/高层管理者是否要关心细节?

    总监也好,首席也罢,都应该加上业务发展时期的时间轴。

    处于快速发展期的公司,一般不可能因为闲着蛋疼,招个CTO玩一玩,或者说掐指一算,感觉天空出现了祥瑞,预兆着公司将在半年以后业务规模翻几翻,咱们先招个CTO备着,以备不时之需。

    打算招人,通常是遇到了解决不了的问题,现有的小伙伴缺乏经验,搞不定,迈不过这个坎了。好吧,动用人脉网络与猎头圈,针对性的找个哥们来填坑吧。

    至于Title,VP也好,总监也罢,只要老员工这碗水能端平,只要候选人想要的,一般都能满足。

    那问题来了,如果这来填坑的哥们只会画饼,没实战经验,一般会沦陷于两大困境。

    一是如何服众,二是如何实现。

    常听人说,技术男不服管理,只服大神,因此这两大困境的解决路径是相通的。

    我急忙回答,这个的确是这样。

    说到这,我想起去年曾经面过的一位技术VP,看他简历上写着有过 “抢票秒杀场景” 的经验,便请他详细介绍下整个架构与场景实现。

    他用了十分钟时间,在黑板上画了一幅拓扑图,并分别介绍了他们在缓存、熔断、降级与限流的方案选型。

    我觉得很不错,证明他的确有亲临整个过程。

    随即我问他,“能详细介绍下其中的分布式缓存实现吗?” 他支支吾吾了很久,基本只能说出个大概,尤其对热迁移、一致性哈希原理之类的问题,完全不懂。

    随后我又问他,“能详细谈谈你们是如何做限流的吗?” 他来了精神,把Nginx暴利限流的方式讲了一遍,我接着问,“这样不就造成业务有损了吗?如果让你重新来一次,你还有其他方案吗?”

    他回答:“异步实现。”

    我追问:“如何异步呢?能详细说下吗?”

    他愣了几秒,略带不耐烦的回答:“不好意思,这些都是架构师做的,我是来面试技术VP的,干嘛总问我技术细节呢?”

    我很知趣,为了缓和尴尬,立即把话题岔到管理类话题上去了。

    妻子说,你看,处于快速发展期的公司,招你就是来解决问题的。

    如果你就知道个大概,那还找你干什么呢?

    妻子继续说,在我们投资领域有这样的一个说法,不知道你们有没有。

    我说,什么说法?

    如果你要找一名总监,或者VP,那就去挖对标企业团队中的技术二把手。

    为什么呢?因为与总监相比,二把手不仅薪资上会略低,而且新Title对他更有吸引力,况且一般他对细节的了解会更深,更有利于执行落地

    我喝了口茶,点了点头,有道理。

    我立即追问,那处于平稳期或衰退期的公司呢?会有什么不一样吗?

    “进入平稳期或衰退期,还要总监和VP干嘛?” 妻子反问我。

    “怎么不要?团队还在,总需要人管理啊。” 我不服气。

    “算了吧你,你们这种技术岗位等同于工具,一旦业务进入平稳期或衰退期,成本中心的热点就会凸显,每个岗位都有Leader在那盯着,维持着正常的业务运行。这时,还有什么规划和平台要做吗?没了吧?”

    妻子拍了拍我的肩膀,冷笑着说:“到这天,什么CTO,什么技术总监,就等着被收拾吧。早和你说了,都是高危职业。”

    我咽了口唾沫,问:“投资领域也这样吗?”

    妻子转过脸来看了看我:“这是游戏的基本规则,混了那么多年,还那么惊讶干嘛?”

    我叹了口气,有个视角犀利的老婆,不知道这是福,还是祸。

    不关心技术细节,结果一般会如何?

    我曾在很多演讲与文章中提到过,国内有许多技术管理者的晋升路径通常与领导关系、时机巧合、能说会道有关。

    职务的高低与否,只是体现出企业对他的一种信任,而不是其技术能力的强或弱。

    再说了,判断某人是否达到晋升的标准,在不同企业、不同时期、不同行业、不同老板的客观环境下都不相同。

    讲个真实的事情,为了避免得罪人,称这位主人公为 “小李” 吧。

    某年,小李从毕业后一直在A公司工作,截止到年底将满三年,就因为能说会道,业务理解能力强,非常受到老板的赏识,老板曾想提拔他,但考虑到老员工心理平衡的问题因此作罢。

    新年刚过,小李的部门总监离职,部门内都是两年内的新员工,老板把小李提拔到了部门总监的位置上。

    正巧此刻业务发展较快,公司急需搭建公共技术平台,助力于开发效率的提升。

    三年的时间,说长不长,说短不短,外加工作内容多半与业务沟通及逻辑研发有关,小李在这方面却毫无经验。为了解决这一难题,公司挖来了两名有经验的架构师,协助小李共同建设平台。

    一年后,平台逐渐成型,基本满足了公司的业务发展要求。小李在这一年中,无论在系统规划,还是在产品设计方面都有了很大的进步。

    俗话说,环境创造人才,果真不假。

    由于是非计算机专业出身,加上从事一线开发时间较短,在技术选型与实践的关键点把控上,小李通常总是浮于表面,喜欢夸夸其谈,卖弄资历,遇到问题总爱把问题甩给架构师,还总把 “管理和技术要分开”、“顶层设计才是关键点” 这样的理论挂在嘴边。

    这种论调,不仅容易招来技术小伙伴的反感,而且会把心态搞得越发浮躁。

    两年以后,由于业务转型,公司开始大幅度裁撤技术团队。小李也受到波及,开始四处找工作,可结果却四处碰壁。

    面试过的所有公司,对他的评价几乎完全一致:

    1. 应用场景都经历过,但都浮于表面。

    2. 技术基础较差,脱离一线已久。

    3. 技术栈了解程度浅,对原理模糊不清。

    4. 薪资要求较高,心态过于浮躁。

    真遗憾,落得这样一个评价,还有哪家公司敢要你呢?

    记得曾经和朋友聊到过这样几句话:

    1. 技术实践场景落地很重要。哪来那么多规划要做?哪来那么多顶层设计要做?

    2. 技术原理很重要。哪有那么多新技术要学?原理都差不多,一通百通。

    3. 技术细节很重要。哪来那么多规划要做?

    4. 比起那些玄乎的管理理论,实实在在的代码对程序员更有说服力。

    在去年的某次演讲中,我曾说过这样一段话。

    有人说,不写代码的CTO格局更高,视野更广。我不这么认为。

    不管你面对多大的舞台,其实都是由一个又一个小小的细节组成的,细节不仅可以决定整个事物的最终等级,还可以改变事物的整体发展方向,甚至可以决定任何事情的成败。

    忽略细节,抛弃代码,就好像武士丢弃了剑,老虎拔掉了牙齿。

    当一名技术男脱离了技术细节,就像断了线的风筝,当没风来的时候,或许你也能悠悠潺潺的飘忽一会,冷不丁刮来一阵狂风,你便会飞的无影无踪。

    不过,假如你家里有矿,那可以随意。

    展开全文
  • 怎么开始写技术博客

    2018-11-13 21:06:40
    开始写技术博客最好的时间是十年前,其次是现在。 博客平台选择 自建博客网站  比较麻烦,需要找博客源码或自己编写管理平台、买服务器、搭建、部署、维护。如果以后想走web开发路线,整个过程其实有助于加深...

    开始写技术博客最好的时间是十年前,其次是现在。

    博客平台选择

    1、自建博客网站

    比较麻烦,需要找博客源码或自己编写管理平台、买服务器、搭建、部署、维护。如果以后想走web开发路线,整个过程其实有助于加深对web应用的理解,而且自己写的博客管理平台也是一个不错的入门项目,是初级开发者的加分项。

    不过在开始写博客时还是侧重于内容和习惯养成,自建平台反馈来得太慢,反而更容易半途而废。个人觉得在初期暂不考虑自建博客平台,等各方面都上手了再作打算。

    2、主流博客网站

    目前IT行业比较主流的博客平台是CSDN和博客园,主要是SEO做得比较好,平时遇到问题就经常搜到这两个网站。所以相对的,自己写的博客也比较容易让别人看到,形成即时的正反馈。

    CSDN和博客园感觉差别不是很大,个人比较肤浅,从UI的角度选择了CSDN。至于广告太多的问题,这里偷偷推荐Stylus插件,选择第一个模板,按作者的提示把右下角的二维码改掉就行了。

    在CSDN遇到的几个问题

    1、用户名不能改

    真的是改不了,只能重新注册账号。如果手机号注册过账号了,查了下只能打CSDN客服电话解除绑定。如果对跟别人接触相对比较抵触(没错,正是在下),可以在网上找SMS服务,找个临时手机号接收验证码即可。

    2、Markdown编辑器还是富文本编辑器

    浅度使用的话,没差富文本编辑器跟word差不多,比较容易上手;Markdown要写点标记语言,需要一点学习成本,不过CSDN里停供了一些方便的按钮,所以写起来也跟word差不太多。不过使用MarkDown编写这篇文章的时候,总是有一些bug,比如有时候字体大小莫名的不一样,不知道是什么原因,不过总体来看问题不大。

    3、Markdown编辑段前空格

    输入法切全角,打两个空格即可。或者干脆不要,段与段之间空一行。

    展开全文
  • 本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。 2. 基本...

    作者:huashiou

    segmentfault.com/a/1190000018626163

    1. 概述

    本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。

    2. 基本概念

    在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:

    分布式

    系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上

    高可用

    系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性

    集群

    一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。如Zookeeper中的Master和Slave分别部署在多台服务器上,共同组成一个整体提供集中配置服务。

    在常见的集群中,客户端往往能够连接任意一个节点获得服务,并且当集群中一个节点掉线时,其他节点往往能够自动的接替它继续提供服务,这时候说明集群具有高可用性

    负载均衡

    请求发送到系统时,通过某些方式把请求均匀分发到多个节点上,使系统中每个节点能够均匀的处理请求负载,则可认为系统是负载均衡的

    正向代理和反向代理

    系统内部要访问外部网络时,统一通过一个代理服务器把请求转发出去,在外部网络看来就是代理服务器发起的访问,此时代理服务器实现的是正向代理;当外部请求进入系统时,代理服务器把该请求转发到系统中的某台服务器上,对外部请求来说,与之交互的只有代理服务器,此时代理服务器实现的是反向代理。

    简单来说,正向代理是代理服务器代替系统内部来访问外部网络的过程,反向代理是外部请求访问系统时通过代理服务器转发到内部服务器的过程。

    3. 架构演进

    3.1 单机架构

    以淘宝作为例子。在网站最初时,应用数量与用户数都较少,可以把Tomcat和数据库部署在同一台服务器上。浏览器往www.taobao.com发起请求时,首先经过DNS服务器(域名系统)把域名转换为实际IP地址10.102.4.1,浏览器转而访问该IP对应的Tomcat。

    随着用户数的增长,Tomcat和数据库之间竞争资源,单机性能不足以支撑业务

    3.2 第一次演进:Tomcat与数据库分开部署

    Tomcat和数据库分别独占服务器资源,显著提高两者各自性能。

    随着用户数的增长,并发读写数据库成为瓶颈

    3.3 第二次演进:引入本地缓存和分布式缓存

    在Tomcat同服务器上或同JVM中增加本地缓存,并在外部增加分布式缓存,缓存热门商品信息或热门商品的html页面等。通过缓存能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。

    其中涉及的技术包括:使用memcached作为本地缓存,使用Redis作为分布式缓存,还会涉及缓存一致性、缓存穿透/击穿、缓存雪崩、热点数据集中失效等问题。

    缓存抗住了大部分的访问请求,随着用户数的增长,并发压力主要落在单机的Tomcat上,响应逐渐变慢

    3.4 第三次演进:引入反向代理实现负载均衡

    在多台服务器上分别部署Tomcat,使用反向代理软件(Nginx)把请求均匀分发到每个Tomcat中。此处假设Tomcat最多支持100个并发,Nginx最多支持50000个并发,那么理论上Nginx把请求分发到500个Tomcat上,就能抗住50000个并发。

    其中涉及的技术包括:Nginx、HAProxy,两者都是工作在网络第七层的反向代理软件,主要支持http协议,还会涉及session共享、文件上传下载的问题。

    反向代理使应用服务器可支持的并发量大大增加,但并发量的增长也意味着更多请求穿透到数据库,单机的数据库最终成为瓶颈

    3.5 第四次演进:数据库读写分离

    把数据库划分为读库和写库,读库可以有多个,通过同步机制把写库的数据同步到读库,对于需要查询最新写入数据场景,可通过在缓存中多写一份,通过缓存获得最新数据。

    其中涉及的技术包括:Mycat,它是数据库中间件,可通过它来组织数据库的分离读写和分库分表,客户端通过它来访问下层数据库,还会涉及数据同步,数据一致性的问题。

    业务逐渐变多,不同业务之间的访问量差距较大,不同业务直接竞争数据库,相互影响性能

    3.6 第五次演进:数据库按业务分库

    把不同业务的数据保存到不同的数据库中,使业务之间的资源竞争降低,对于访问量大的业务,可以部署更多的服务器来支撑。这样同时导致跨业务的表无法直接做关联分析,需要通过其他途径来解决,但这不是本文讨论的重点,有兴趣的可以自行搜索解决方案。

    随着用户数的增长,单机的写库会逐渐会达到性能瓶颈

    3.7 第六次演进:把大表拆分为小表

    比如针对评论数据,可按照商品ID进行hash,路由到对应的表中存储;针对支付记录,可按照小时创建表,每个小时表继续拆分为小表,使用用户ID或记录编号来路由数据。

    只要实时操作的表数据量足够小,请求能够足够均匀的分发到多台服务器上的小表,那数据库就能通过水平扩展的方式来提高性能。其中前面提到的Mycat也支持在大表拆分为小表情况下的访问控制。

    这种做法显著的增加了数据库运维的难度,对DBA的要求较高。数据库设计到这种结构时,已经可以称为分布式数据库,但是这只是一个逻辑的数据库整体,数据库里不同的组成部分是由不同的组件单独来实现的,如分库分表的管理和请求分发,由Mycat实现,SQL的解析由单机的数据库实现,读写分离可能由网关和消息队列来实现,查询结果的汇总可能由数据库接口层来实现等等,这种架构其实是MPP(大规模并行处理)架构的一类实现。

    目前开源和商用都已经有不少MPP数据库,开源中比较流行的有Greenplum、TiDB、Postgresql XC、HAWQ等,商用的如南大通用的GBase、睿帆科技的雪球DB、华为的LibrA等等,不同的MPP数据库的侧重点也不一样,如TiDB更侧重于分布式OLTP场景,Greenplum更侧重于分布式OLAP场景,这些MPP数据库基本都提供了类似Postgresql、Oracle、MySQL那样的SQL标准支持能力,能把一个查询解析为分布式的执行计划分发到每台机器上并行执行,最终由数据库本身汇总数据进行返回,也提供了诸如权限管理、分库分表、事务、数据副本等能力,并且大多能够支持100个节点以上的集群,大大降低了数据库运维的成本,并且使数据库也能够实现水平扩展。

    数据库和Tomcat都能够水平扩展,可支撑的并发大幅提高,随着用户数的增长,最终单机的Nginx会成为瓶颈

    3.8 第七次演进:使用LVS或F5来使多个Nginx负载均衡

    由于瓶颈在Nginx,因此无法通过两层的Nginx来实现多个Nginx的负载均衡。图中的LVS和F5是工作在网络第四层的负载均衡解决方案,其中LVS是软件,运行在操作系统内核态,可对TCP请求或更高层级的网络协议进行转发,因此支持的协议更丰富,并且性能也远高于Nginx,可假设单机的LVS可支持几十万个并发的请求转发;F5是一种负载均衡硬件,与LVS提供的能力类似,性能比LVS更高,但价格昂贵。

    由于LVS是单机版的软件,若LVS所在服务器宕机则会导致整个后端系统都无法访问,因此需要有备用节点。可使用keepalived软件模拟出虚拟IP,然后把虚拟IP绑定到多台LVS服务器上,浏览器访问虚拟IP时,会被路由器重定向到真实的LVS服务器,当主LVS服务器宕机时,keepalived软件会自动更新路由器中的路由表,把虚拟IP重定向到另外一台正常的LVS服务器,从而达到LVS服务器高可用的效果。

    此处需要注意的是,上图中从Nginx层到Tomcat层这样画并不代表全部Nginx都转发请求到全部的Tomcat,在实际使用时,可能会是几个Nginx下面接一部分的Tomcat,这些Nginx之间通过keepalived实现高可用,其他的Nginx接另外的Tomcat,这样可接入的Tomcat数量就能成倍的增加。

    由于LVS也是单机的,随着并发数增长到几十万时,LVS服务器最终会达到瓶颈,此时用户数达到千万甚至上亿级别,用户分布在不同的地区,与服务器机房距离不同,导致了访问的延迟会明显不同

    3.9 第八次演进:通过DNS轮询实现机房间的负载均衡

    在DNS服务器中可配置一个域名对应多个IP地址,每个IP地址对应到不同的机房里的虚拟IP。当用户访问www.taobao.com时,DNS服务器会使用轮询策略或其他策略,来选择某个IP供用户访问。

    此方式能实现机房间的负载均衡,至此,系统可做到机房级别的水平扩展,千万级到亿级的并发量都可通过增加机房来解决,系统入口处的请求并发量不再是问题。

    随着数据的丰富程度和业务的发展,检索、分析等需求越来越丰富,单单依靠数据库无法解决如此丰富的需求

    3.10 第九次演进:引入NoSQL数据库和搜索引擎等技术

    当数据库中的数据多到一定规模时,数据库就不适用于复杂的查询了,往往只能满足普通查询的场景。对于统计报表场景,在数据量大时不一定能跑出结果,而且在跑复杂查询时会导致其他查询变慢,对于全文检索、可变数据结构等场景,数据库天生不适用。

    因此需要针对特定的场景,引入合适的解决方案。如对于海量文件存储,可通过分布式文件系统HDFS解决,对于key value类型的数据,可通过HBase和Redis等方案解决,对于全文检索场景,可通过搜索引擎如ElasticSearch解决,对于多维分析场景,可通过Kylin或Druid等方案解决。

    当然,引入更多组件同时会提高系统的复杂度,不同的组件保存的数据需要同步,需要考虑一致性的问题,需要有更多的运维手段来管理这些组件等。

    引入更多组件解决了丰富的需求,业务维度能够极大扩充,随之而来的是一个应用中包含了太多的业务代码,业务的升级迭代变得困难

    3.11 第十次演进:大应用拆分为小应用

    按照业务板块来划分应用代码,使单个应用的职责更清晰,相互之间可以做到独立升级迭代。这时候应用之间可能会涉及到一些公共配置,可以通过分布式配置中心Zookeeper来解决。

    不同应用之间存在共用的模块,由应用单独管理会导致相同代码存在多份,导致公共功能升级时全部应用代码都要跟着升级

    3.12 第十一次演进:复用的功能抽离成微服务

    如用户管理、订单、支付、鉴权等功能在多个应用中都存在,那么可以把这些功能的代码单独抽取出来形成一个单独的服务来管理,这样的服务就是所谓的微服务,应用和服务之间通过HTTP、TCP或RPC请求等多种方式来访问公共服务,每个单独的服务都可以由单独的团队来管理。

    此外,可以通过Dubbo、SpringCloud等框架实现服务治理、限流、熔断、降级等功能,提高服务的稳定性和可用性。

    不同服务的接口访问方式不同,应用代码需要适配多种访问方式才能使用服务,此外,应用访问服务,服务之间也可能相互访问,调用链将会变得非常复杂,逻辑变得混乱

    3.13 第十二次演进:引入企业服务总线ESB屏蔽服务接口的访问差异

    通过ESB统一进行访问协议转换,应用统一通过ESB来访问后端服务,服务与服务之间也通过ESB来相互调用,以此降低系统的耦合程度。这种单个应用拆分为多个应用,公共服务单独抽取出来来管理,并使用企业消息总线来解除服务之间耦合问题的架构,就是所谓的SOA(面向服务)架构,这种架构与微服务架构容易混淆,因为表现形式十分相似。

    个人理解,微服务架构更多是指把系统里的公共服务抽取出来单独运维管理的思想,而SOA架构则是指一种拆分服务并使服务接口访问变得统一的架构思想,SOA架构中包含了微服务的思想。

    业务不断发展,应用和服务都会不断变多,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突的问题,此外,对于如大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难

    3.14 第十三次演进:引入容器化技术实现运行环境隔离与动态服务管理

    目前最流行的容器化技术是Docker,最流行的容器管理服务是Kubernetes(K8S),应用/服务可以打包为Docker镜像,通过K8S来动态分发和部署镜像。Docker镜像可理解为一个能运行你的应用/服务的最小的操作系统,里面放着应用/服务的运行代码,运行环境根据实际的需要设置好。

    把整个“操作系统”打包为一个镜像后,就可以分发到需要部署相关服务的机器上,直接启动Docker镜像就可以把服务起起来,使服务的部署和运维变得简单。

    在大促的之前,可以在现有的机器集群上划分出服务器来启动Docker镜像,增强服务的性能,大促过后就可以关闭镜像,对机器上的其他服务不造成影响(在3.14节之前,服务运行在新增机器上需要修改系统配置来适配服务,这会导致机器上其他服务需要的运行环境被破坏)。

    使用容器化技术后服务动态扩缩容问题得以解决,但是机器还是需要公司自身来管理,在非大促的时候,还是需要闲置着大量的机器资源来应对大促,机器自身成本和运维成本都极高,资源利用率低

    3.15 第十四次演进:以云平台承载系统

    系统可部署到公有云上,利用公有云的海量机器资源,解决动态硬件资源的问题,在大促的时间段里,在云平台中临时申请更多的资源,结合Docker和K8S来快速部署服务,在大促结束后释放资源,真正做到按需付费,资源利用率大大提高,同时大大降低了运维成本。

    所谓的云平台,就是把海量机器资源,通过统一的资源管理,抽象为一个资源整体,在之上可按需动态申请硬件资源(如CPU、内存、网络等),并且之上提供通用的操作系统,提供常用的技术组件(如Hadoop技术栈,MPP数据库等)供用户使用,甚至提供开发好的应用,用户不需要关系应用内部使用了什么技术,就能够解决需求(如音视频转码服务、邮件服务、个人博客等)。在云平台中会涉及如下几个概念:

    • IaaS:基础设施即服务。对应于上面所说的机器资源统一为资源整体,可动态申请硬件资源的层面;

    • PaaS:平台即服务。对应于上面所说的提供常用的技术组件方便系统的开发和维护;

    • SaaS:软件即服务。对应于上面所说的提供开发好的应用或服务,按功能或性能要求付费。

    至此,以上所提到的从高并发访问问题,到服务的架构和系统实施的层面都有了各自的解决方案,但同时也应该意识到,在上面的介绍中,其实是有意忽略了诸如跨机房数据同步、分布式事务实现等等的实际问题,这些问题以后有机会再拿出来单独讨论

    4. 架构设计总结

    架构的调整是否必须按照上述演变路径进行?

    不是的,以上所说的架构演变顺序只是针对某个侧面进行单独的改进,在实际场景中,可能同一时间会有几个问题需要解决,或者可能先达到瓶颈的是另外的方面,这时候就应该按照实际问题实际解决。如在政府类的并发量可能不大,但业务可能很丰富的场景,高并发就不是重点解决的问题,此时优先需要的可能会是丰富需求的解决方案。

    对于将要实施的系统,架构应该设计到什么程度?

    对于单次实施并且性能指标明确的系统,架构设计到能够支持系统的性能指标要求就足够了,但要留有扩展架构的接口以便不备之需。对于不断发展的系统,如电商平台,应设计到能满足下一阶段用户量和性能指标要求的程度,并根据业务的增长不断的迭代升级架构,以支持更高的并发和更丰富的业务。

    服务端架构和大数据架构有什么区别?

    所谓的“大数据”其实是海量数据采集清洗转换、数据存储、数据分析、数据服务等场景解决方案的一个统称,在每一个场景都包含了多种可选的技术,如数据采集有Flume、Sqoop、Kettle等,数据存储有分布式文件系统HDFS、FastDFS,NoSQL数据库HBase、MongoDB等,数据分析有Spark技术栈、机器学习算法等。总的来说大数据架构就是根据业务的需求,整合各种大数据组件组合而成的架构,一般会提供分布式存储、分布式计算、多维分析、数据仓库、机器学习算法等能力。而服务端架构更多指的是应用组织层面的架构,底层能力往往是由大数据架构来提供。

    有没有一些架构设计的原则?

    • N+1设计。系统中的每个组件都应做到没有单点故障;

    • 回滚设计。确保系统可以向前兼容,在系统升级时应能有办法回滚版本;

    • 禁用设计。应该提供控制具体功能是否可用的配置,在系统出现故障时能够快速下线功能;

    • 监控设计。在设计阶段就要考虑监控的手段;

    • 多活数据中心设计。若系统需要极高的高可用,应考虑在多地实施数据中心进行多活,至少在一个机房断电的情况下系统依然可用;

    • 采用成熟的技术。刚开发的或开源的技术往往存在很多隐藏的bug,出了问题没有商业支持可能会是一个灾难;

    • 资源隔离设计。应避免单一业务占用全部资源;

    • 架构应能水平扩展。系统只有做到能水平扩展,才能有效避免瓶颈问题;

    • 非核心则购买。非核心功能若需要占用大量的研发资源才能解决,则考虑购买成熟的产品;

    • 使用商用硬件。商用硬件能有效降低硬件故障的机率;

    • 快速迭代。系统应该快速开发小功能模块,尽快上线进行验证,早日发现问题大大降低系统交付的风险;

    • 无状态设计。服务接口应该做成无状态的,当前接口的访问不依赖于接口上次访问的状态。

    展开全文
  • 了解web技术

    2018-03-20 21:13:15
    web开发:做网站的,web开发技术是互联网应用中最为关键技术之一,互联网应用中包括网络技术,数据库技术,web开发技术等。web服务器:又称www服务器,网站服务器,站点服务器,是将本地信息用超文本组织,为用户在...

    Web开发原理

    网站:是通过浏览器访问的应用。

    web开发:做网站的,web开发技术是互联网应用中最为关键技术之一,互联网应用中包括网络技术,数据库技术,web开发技术等。

    web服务器:又称www服务器,网站服务器,站点服务器,是将本地信息用超文本组织,为用户在网上搜索和浏览信息提供服务。

    web网页:储存在服务器端的文件,包含超文本标记语言HTML组成的文本文件,可称为超链接文件,又称为网页文件或web网页文件。

    视频格式:abc.mp4

    超链接:<a..../abc.mp4></a>

    了解web技术

    C/S模式

    C/SClient/server,客户机/服务器)方式的网络计算模式,工作分别由服务器和客户机完成。

    服务器负责管理数据的访问,对数据库进行检索和排序,此外还要对客户机服务器网络结构中的数据库安全层层枷锁,进行保护。

    客户机负责与用户交互,收集用户信息,通过网络请求服务器对诸如数据库、电子表格或文字处理文档等信息进行处理。

    C/S模式中,资源明显不对等,是一种“胖客户机”(干得多)或“瘦服务器”(干的少)结构。

    简单的C/S模式

    B/S模式

    B/SBrowser/Server,浏览器/服务器)方式的网络计算模式,是一种三层架构的计算模式

    B/S模式的三层应用

    两种模式的比较分析

    (1)开发和维护成本  C/S模式维护成本较高,对不同的客户端要开发不同的程序;B/S模式的客户端只需有通用的浏览器,所有维护与升级工作都是在服务器上执行的,大大降低了开发和维护的成本。

    (2)客户端负载  C/S模式的客户端负载重且随着应用系统的功能越来越复杂,客户端的用用程序也变得越来越庞大;B/S模式的客户端把事务处理逻辑部分分给了功能服务器,客户端只需进行显示即可。

    (3)可移植性  C/S模式移植困难,一般来说互不兼容;B/S模式客户端安装的是通用浏览器,故不存在移植性问题。

    (4)用户界面

    (5)安全性  C/S模式适用于专人使用系统,适用于安全性要求较高的专用应用软件;B/S适用于安全性要求较高的专用应用软件;B/S模式适用于交互性要求较多、使用人数较多、安全性要求不太高的应用环境。

    综上所述,B/S模式相对于C/S模式具有更多的优势。

    了解B/S模式技术

      1.CGI(Common Gateway Interface,通用网管接口)

    编写CGI程序设计语言有很多种,常用的有CPERLVisual C++等。

    2.ASP

    ASP(Active Server Pages)(动态服务器页面,是一种框架)是基于微软Window平台的动态页面开发技术。

    IISInternet Information Serve,互联网信息服务)用于建立NT系统的服务器。在NT的各个版本中都进行捆绑销售的组件,提供了WWW(Word Wide Web,万维网)FTP(File Transfer Protocol,文件传输协议)、SMIP(Simple Mail Transfer Protocol,简单邮件传输协议)等各种服务。

    3.PHP

    PHP(Personal Home Pages)是一种服务端的脚本语言,嵌入在HTML中书写。

    PHP的语法与C语言、Java语言语法极为相似,它具有大的函数库,主要原因是它是开源式的,源代码完全公开,每个使用PHP的程序员都可以加一些自己的东西,从而实现更多功能。PHP几乎支持所有的数据库。

    但是PHP对组件的支持不够,扩展性较差,常用它与免费的数据库系统MySQL一起构建中小型网B/S模式的网站或信息系统。

    2JSP

    JSP(Java Server Pages)java服务器页面,以Java语言为基础。

    JSP充分利用了Java技术的优势,具有极强的扩展能力和良好的收缩性。

    JDBC技术是(Java数据库连接的简称),JDBC就是封装了具体数据库连接方式等信息,然后提供一个“统一的”接口,方便Java程序联结数据库。

    JSP与其他B/S模式技术的比较

    JSP相对于其他B/S模式下的动态网页技术有诸多优势。

    1)跨平台性    JSP几乎可以在所有的操作系统平台运行。

    2)一次编写,到处运行

    3)编写容易,快速上手

    4)可重用性

    5)数据库连接技术

    了解HTML

    HTML(Hyper Text Markup Language,超文本标记语言)是一种描述网页的标记语言,不是编程语言(编程语言是用来向计算机发出指令的)。

    URL(Uniform Resource Locator,统一资源定位器),是Internet中用来唯一标志和定位资源的一种简单的命名机制。

    URL有三部分构成:协议、主机DNS名和文件名,协议名称通常为HttpFTPFile

    了解JavaScript

    JavaScript是一种脚本语言,属于Web语言,可直接放入HTML文档中,JavaScript使得网页的交互性更强,更加生动灵活。JavaScript可直接在Web浏览器中解释执行)

     

    展开全文
  • 最近在极客时间上学习了阿里技术专家李云华老师的课程《从0开始学架构》,觉得受益匪浅。 按照李老师的说法: 抛开 BAT 各自差异很大的业务,站在技术的角度来看,其实 BAT 的技术架构基本是一样的。再将视角放大...

    最近在极客时间上学习了阿里技术专家李云华老师的课程《从0开始学架构》,觉得受益匪浅。

    按照李老师的说法:

    抛开 BAT 各自差异很大的业务,站在技术的角度来看,其实 BAT 的技术架构基本是一样的。再将视角放大,你会发现整个互联网行业的技术发展,最后都是殊途同归。

    抛开 BAT 各自差异很大的业务,站在技术的角度来看,其实 BAT 的技术架构基本是一样的。再将视角放大,你会发现整个互联网行业的技术发展,最后都是殊途同归。

    根据课程的内容,我整理出了一张“互联网架构技术全景图”,分享给大家,希望能帮助大家从架构的高度去把握互联网技术的发展。图是用思维导图软件xmind画出来的。

     

     

    展开全文
  • 社区是聚集一类具有相同爱好或者相同行业的群体,IT技术社区就是聚集了IT行业内的技术人,在技术社区可以了解到行业的最新进展,学习最前沿的技术,认识有相同爱好的朋友,在一起...
  • 2018全球技术展望报告

    2018-02-17 08:05:45
    来源:199IT互联网数据中心概要:随着人工智能(AI)和其他技术的飞速发展,智能企业层出不穷,并正融入人们的生活。埃森哲(纽交所代码:ACN)最新发布的《埃森哲技术展望2018》报告指出,随着人工智能(AI)和其他...
  • 一、 总体设计 为什么采用中台架构前几篇已经说明了,这里就介绍一下基础层和平台层的功能。 基础层 发布、编辑、上架、下架这些功能大家应该比较熟悉。 审核:是否需要审核通过才允许上架 打标:对商品进行标记,...
  • 导读 大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来源:传感器,气候信息,公开的信息,如...
  • 每一个程序员都有一个梦想,梦想着能够进入阿里、腾讯、字节跳动、百度等一线互联网公司,由于身边的环境等原因,不知道 BAT 等一线互联网公司使用哪些技术?或者该如何去学习这些技术?或者我该去哪些获取这些技术...
  • 从1977年第一代DNA测序技术(Sanger法)1,发展至今三十多年时间,测序技术已取得了相当大的发展,从第一代到第三代乃至第四代,测序读长从长到短,再从短到长。虽然就当前形势看来第二代短读长测序技术在全球测序...
  • (一)、六大技术优势 (二)、业务与组织优势 四、实施微服务面临的挑战 (一)、技术架构的挑战 (二)、研发过程的挑战 参考书籍、文献和资料: 一、微服务架构实施的前提 如图,Martin Fowler结石的生产...
  • 带您纵览5G、人工智能、增强现实/虚拟现实、初创企业和汽车技术领域最新创新技术成果 弗吉尼亚州阿灵顿市--(美国商业资讯)--美国消费技术协会今日公布了2019 亚洲消费电子展 即将呈现的主要技术趋势,其中包括5G、...
  • 图文并茂 RAID 技术全解 – RAID0、RAID1、RAID5、RAID100……  RAID 技术相信大家都有接触过,尤其是服务器运维人员,RAID 概念很多,有时候会概念混淆。这篇文章为网络转载,写得相当不错,它对 RAID 技术的概念...
  • Java核心技术 卷1 卷2原书第10版.pdf,包括:Java核心技术 卷1 基础知识 原书第10版.pdf,Java核心技术 卷2 高级特性原书第10版.pdf。 资源保存在腾讯微云上,下载不需要微云客户端,有需要这个资源的同学,请帅气...
  • 本文主要总结一些我在学习RTMP流媒体技术过程中积累的经验。也为后来学习RTMP流媒体技术的人们一个参考。本文力图从简到难,循序渐进的介绍RTMP流媒体技术的方方面面,先从应用说起,逐步深化剖析相关工程的源代码。...
  • 如果每台计算机都有自己的独立的公网IP,那么P2P技术就比较好实现了,但是现实中由于NAT的存在,使得P2P技术最大的难点就在于穿越NAT的限制,俗称“打洞”。 二、 NAT(Network Address Transl...
  • 技术栈是什么鬼?

    2020-04-08 18:09:14
    技术栈是什么鬼? 栈的英文是stack 首先,我们使用金山词霸来查一下stack的中文解释 stack有堆起来的意思,其实就是堆叠,顾名思义,技术栈就是你掌握了一堆的技术(掌握多种技术) 一般来说是指将N种技术互相...
  • 二、微服务架构实现技术选型:参考标准的两个维度+微服务实现框架对比 (一)技术选型的两个参考标准 1.核心组件完备性 2.关键要素实现难度 (二)微服务实现框架对比 Spring Boot/Cloud Dubbo gRPC 新锐...
1 2 3 4 5 ... 20
收藏数 4,174,775
精华内容 1,669,910
关键字:

技术