from: http://blog.csdn.net/caopeng26/article/details/52235883css
版权声明:本文为博主原创文章,未经博主容许不得转载。html
通往互联网架构师之路—全栈工程师java
一、首先咱们看什么是架构师?架构师应该具有哪些能力?linux
你们都知道不少公司都有架构师这个职位,可是我想告诉你们的是看一我的是否是架构师不是看职位,而是看他所具有的能力以及正在作的事,因此有架构师头衔的人不必定具有架构师的能力,而不是架构师的人却在作着架构师的工做。ios
二、架构师相似于建筑行业的总设计师,一般在一个软件项目中,架构师须要完成软件项目中全部技术环节的设计,架构师虽说不用亲自编写全部代码,可是架构师会对项目中全部运用的技术环节了如指掌。程序员
三、所以架构师既能够是一个很简单的工做,也能够是一个具有超高难度的工做。而具体的难度系数,取决于具体的项目类型。就好像盖一个两层小楼,和一个跨海大桥,对架构师的要求大相径庭。web
四、在今天的课程中,陈老师给你们画了一些不一样类型项目的架构图。若是想要成为架构师,你们能够看一下要成为架构师针对不一样项目类型须要掌握的技术。数据库
五、你们能够看到框里面并列列出了不少技术,只要位于同一层的技术掌握一个就能够完成完整的软件流程设计,不要求掌握所有。编程
六、好比说咱们如今目标任务是开发一个自主品牌的mp3播放器,咱们的架构师须要懂硬件,好比单片机,传感器,声音设备,再利用汇编或者C语言,来对该电子系统编写相应的程序,就能够完成这样的一套mp3程序开发。
七、但软件的架构师在不断进化着,在计算机发明的初期,几乎大部分应用程序都是直接针对硬件来编写的,可是这样会致使程序的通用性差,因此才出现了操做系统。在目前市场上流通的大部分软件都是工做在操做系统之上的。
八、编写这样的应用程序须要咱们架构师了解硬件,了解操做系统,而且可以使用C,C++,VB,等编程语言调用操做系统SDK完成软件功能开发。
由操做系统去跟硬件系统打交道,这样对于开发人员的要求就下降了不少,同时应用程序的通用性会变得更好。
九、随着计算机软件的发展,咱们发现不少软件都是在和数据打交道,用户数据须要记录到系统中,同时应该能快速的检索数据,所以在咱们的单机应用中出现了数据库这么一类应用程序。
十、在须要存储数据,搜书数据,以及对数据加工处理统计的时候能够把这些工做交给数据库去处理。
十一、作这类应用软件的开发工程师,对硬件和操做系统了解便可。须要他精通数据库,而且能用任意语言调用系统提供的SDK。
十二、这个是C/S应用程序架构,这里的客户端架构与第三张图单机应用相似,惟一不一样的是在数据的来源的上做出了改变。本来的单机应用程序数据存在本地,可是一个软件系统若是有多人使用多个客户端链接的时候,不可能把数据库再放到莫一台客户机中。
1三、解决方案就是让数据库经过网络对客户端提供数据服务。直接经过客户端远程链接直接操做数据库这种方式也是不能够的,由于数据库若是直接对外提供数据服务,那么凡是能链接到该网络的用户均可以绕过客户端操做数据库,这样数据安全就得不到保障。
1四、所以出现了Server,咱们经过服务器端程序来操做数据库,客户端程序只能选择与服务器端交互,全部的业务操做由服务器端完成,这种模式就是C/S架构。
1五、完成C/S架构的架构师就比作单机应用的架构师难度大不少,不只要懂得单机应用开发所须要的知识,还须要掌握网路数据库系统,以及web服务,socket服务等技术。
1六、C/S应用程序架构存在一些缺点:须要更新全部已安装的客户端版本,并且会出现多个版本并存的状况,后期维护代价极高,并且很不方便。
由于这些缘由,就出现了B/S这些架构的软件。
如图所示,咱们能够看到此架构的服务端与第四张的服务器端基本一致。
1七、主要区别是B/S架构的应用程序不须要安装客户端程序,而是使用大部分的计算机都有安装的浏览器来做为系统前端来与用户交互,而浏览器加载的内容所有来由服务端输出。
1八、这样B/S的架构师难度相对来讲比C/S架构师低不少,而且有诸多的成熟的解决方案,好比:java的javaee架构,微软的asp.net架构,彻底开源的lamp架构,都是很成熟的解决方案。
1九、这样架构的优势在于由于存在大量的成熟的解决方案,只须要一台可连入网络的服务器,就可让整个系统运转起来。开发速度快,运营成本低。这种解决方案被普遍接纳。因此作这样架构的程序员数量不少,也所以每每不被当作架构师来看待。可是作这样架构的应用程序设计也架构设计中的一种。
20、从2010年之后,智能手机在国内大量普及,几年时间诞生了数百万的App与手机游戏,每每一个项目既拥有本身的网站,又拥有独立的APP,并且做为一个总体的系统,iOS,安卓,与网页的数据应该是一致的。
2一、那么要作到这样的架构设计的话,咱们须要让咱们的ios,安卓客户端共用咱们的服务端,这样咱们的多端才能保持数据高度一致。
2二、服务器端的结构没有太大的变化,可是软件设计的方式产生了变化,本来B/S架构中由服务端向浏览器输出相应的html,css,js等静态内容便可,但若是涉及到移动互联网应用开发,咱们会将咱们的应用程序规范化,把前端和后端彻底区分开来。
2三、服务器端提供数据交互服务,并编写相应的接口,移动端进行接口调用,并完成界面数据填充以负责用户交互,即使是移动端浏览器,也应采用这种方式来交互。
2四、它和6张图比较相似,但多出来几块。咱们把横线以上的部分叫服务端,横线如下的叫前端。咱们在移动互联网络时代,常常会涉及到本身的平台与第三方平台的交互,咱们的应用在接入支付宝,微信,微博等功能后,还会涉及到与第三方平台的功能交互。
2五、一般须要咱们经过服务器发起请求调用第三方的API,而且为第三方的平台保留回调的接口,所以在制做这样的应用程序开发的时候,架构师除了要掌握移动互联网络的技术外,还须要对第三方提供的功能与规范以及相应接口有充分的了解。
2六、若是只是从功能实现来讲,可以按照第7张图完成架构设计的架构师,已经能知足需求。可是在实际运营的项目中,除了有功能需求之外,还要有质量需求,好比:网站的负载能力,网络并发链接数,系统的数据吞吐量,项目是否具备扩容能力等。
2七、以前所展现给你们的全部架构,都是基于单服务器架构来设计的,若是只有一台服务器,无能咱们怎样花钱来升级他的硬件配置,咱们会发现很快将没法进一步扩容。最好的CPU,最大的内存条也是有限度的,所以采用集群架构,才是解决问题的正确方法。
2八、而第8张图所画的就是标准的分布式集群架构,集群的扩容原则就是一我的干不完的活多我的一块儿干,让服务器与服务器之间,进行分工与协做。
2九、而作分布式集群的架构的架构师,也有着较高的要求,而互联网上受人敬仰的架构师大多属于这类。你也能够认为这才是真正的架构师。
30、服务器端同第7张,第8张能够是一致的,具体是选择哪一个服务器的架构,取决于项目的规模。
项目初期用户量少,能够选择单服务器架构,若是项目后期服务器负载压力过大,能够重构为分布式集群架构。3一、第9张图的重点在于项目前端,咱们来看前端的技术架构图,这里所画的是市面所流行的混合APP的架构。
3二、著名的混合APP应用有不少,好比说支付宝手机客户端,还有Facebook,这些应用都是采用混合APP架构设计的。
3三、混合APP应用使用html,和css打造用户界面,不管是在浏览器,微信端,仍是在APP中,都是如此。所以他具有B/S应用程序的优势,能够在服务器端更新应用内容,而且让应用在ios,安卓,浏览器端保持高度一致性。
3四、利用单页web APP开发技术,可以让网页程序像原生应用同样流畅,而web APP的缺点在于,网页js程序没法调用手机硬件功能,可是混合APP架构能够经过微信sdk,微博sdk ,iOS bridges,安卓bridge是等方式来获取微信APP,微博APP以及手机硬件的功能。
3五、所以混合APP架构同时具有了web APP与原生应用的优点,成为了市场上主流的移动应用架构设计方法。跨平台兼容性好,开发成本低,开发速度快。逐步取代了大量的原生应用。这也是咱们兄弟全栈工程师学习的主要内容。
3六、为何定这个主题呢?其实咱们会发现全盏所涉及的开发领域和架构师基本一致,区别在于能力与深度
3七、好比分布式服务部分,若是全盏工程师,可使用相似Laravel框架这样的全盏框架解决本地服务,webservice ,消息队列等问题,
3八、但架构师则应该能深刻了解其中原理,并作出相应设计
3九、全栈工程师只要加深各个领域知识深度,很容易向架构师方向发展
40、由于在以往的大公司大团队时代,学科越分越细,所以不管大学课程仍是培训机构,此前都是按专业和学科划分
4一、若是学linux,那么从组网作网络配置,搭建文件共享或者邮件发送,web服务等都须要学习和掌握
4二、学h5的话,webgl游戏开发,网页开发都有学习,其实对于全栈或者架构师发展来讲,这样并很差
4三、若是作全栈,那么我不须要学习如何作网管,因此使用linux应该集中在web服务环境上,相似,学h5,应该着重在移动端触屏设备开发为主,因此划分维度不一样,
4四、若是有了这个认识,就不会被误导,觉得全栈或者架构师就是什么技术都学,什么都会。我么要的是更专业,学习更深。
4五、相信经过今天的分享,你们对如何学习,如何发展,如何成为架构师,能有一个很好的认识。