架构与开源

1.关于架构与技术栈

技术架构一遍经过三个阶段,创建期、瓶颈期和退化期,就像下面这张图所画:
avatar
架构的选型要注意以下几点:功能预见性(功能性)、系统可用性、容错性、可靠性、性能够快、可伸缩、可维护性、安全性、成本、可度量性;
架构的选型的误区:“重复造轮子”、脱离实际业务需求、避免无意义的重构、功能完成是完事了、技术解决一切;

2.关于开源

开源软件的优势:

  • 成本
  • 效率
  • 安全、稳健
  • 大企业的背书
  • 学习成本、技术支持

开源协议的选择:

GPL许可:是 GNU General Public License 的缩写,既GNU通用公共许可协议,是自由软件基金会(GNU)发布的一个软件首选许可,GPL许可一共发布的三个不版本,最新一版是2007年公布的GPLv3,最著名的使用GPL许可的软件就是大Linux。GPL许可的特点就是,使用GPL软件(包括类库)或者源代码(不管多少)的发布的新产品(包括新增源代码和可执行二进制文件)也必须使用GPL协议,也要公开源代码。由于这个许可具有一定的开源强制性,很多大公司对GPL许可的开源软件的选择还是比较谨慎的。GPL 协议有很多变种:比如LGPL, AGPL
LGPL : LGPL 是 GNU Lesser General Public License 的缩写 既GNU宽通用公共许可证,相比于GPL,其开源强制性弱一些,对商用软件更加友好,使用该许可的著名软件是Linux下的办公软件 OpenOffice。按照该许可协议的要求,以类库方式引入基于LGPL许可的软件可以不开源其衍生产品的源代码,单对于LGPL许可授权的源代码进行修改或者和修改相关的衍生代码则必须开源且使用LGPL许可进行授权。
AGPL:Affero General Public License,简称Affero GPL或AGPL,Affero 是一家公司名称,AGPL最初由该公司撰写,改许可是相当于GPL的增强版本,主要是对通过网络发布服务进行限制。GPL许可本身限制的是软件的“发布”行为,只要是使用了GPL许可的源代码或者二进制文件,必须开源且以同样以GPL许可进行授权,但到了互联网十点,很多互联网公司并不发布软件实体,而是提供“服务”,所以GPL的约束力就明显下降了,AGPL许可的目的就是填补这个所谓的“漏洞”,改许可要求,除了GPL本身的约束以外,所有基于AGPL许可软件提供网络服务,其相关源代码必须开源,所以在AGPL许可下,网络服务也被看做一种分发形式。所以很多互联网公司禁止使用 AGPL 许可的开源软件。
BSD许可:BSD(BSD是Berkly Software Distribution的简写)许可最初使用在加州大学伯克利分校发布的 BSD Unix 系统上,随着BSD系统的发展,BSD许可也随之沿用下来。相比于GPL 和 MPL 的严格要求,BSD 许可的的要求就非常宽松,给予使用者非常大的自由度。在该许可下的软件可以自由使用修改,也可以将修改后的代码再次发布,而且可以是按照闭源的私有软件进行发布,只需要在发布的软件和中保留BSD许可协议文件即可,但未经许可不能使用原作者或者机构名义进行宣传和推广。+
MPL许可:MPL是 The Mozilla Public License 的做些。是1998年初Netscape的 Mozilla小组为其开源软件项目设计的软件许可证。MPL许可允许经过MPL授权的源代码和其他授权的文件(包括源代码和二进制文件)混合使用,甚至剥和私有软件混合使用,这相当于GPL许可和BSD或类似许可的折中,其既有一定的开源强制性,又保留一定的私有权利。按照该许可要求,使用基于MPL授权源代码的部分,包括对MPL源代码的修改部分,必须保持MPL授权,这一点和GPL协议类似,但新增代码发布的可使用其他方式授权,甚至是私有授权,也可以比闭源的方式。
MIT 许可:MIT 许可是来自麻省理工学院(Massachusetts Institute of Technology, MIT),该许可被认为是最自由的开源协议之一,也是应用最为广泛的开源协议(据blackduck——一家对软件源代码进行合规审计的公司,统计,全球有将近1/3的开源软件使用MIT开源协议),他的协议声明非常简短,他和BSD许可类似,允许自由修改发布基于MIT的代码和软件,只需要你的发行版里包含原始协议文件即可,其他无任何限制,及时使用原始作者的名义进行推广。使用MIT许可的著名软件有ssh 客户端软件jquery,Rails,putty 和 xwindows等。
Apache 2.0许可:改协议是由Apache软件基金会发布的许可,最初用在像Apache web Server这样Apache的内部软件中,2004年公布了2.0版本。其限制条件和BSD类似,允许自由修改和使用、发布软件,但要求保留版权,相比于BSD许可,该许可对版权要求的更细,每一个被修改后的原始文件都要著名原始版权声明。使用 Apache 2.0许可 著名的软件有 Android ,Apache web server,swift 等。