分类 大观园 下的文章

1.1 定义

作为一个B端产品,为了应对公司快速迭代开拓市场和一部分购买者的定制化需求,与此同时还要保障产品间的用户体验一致性,近年来设计规范这一解决方案不断升温,如Salesforce,antdesign、等纷纷推出了自己的设计规范。那么到底什么是设计规范呢?和设计语言、设计原则、组件库等有什么关系呢?

我认为的设计规范是以下的定义:

设计规范由设计原则、设计语言和组件库构成,在设计原则的指导下使用设计语言和组件库创建体验一致的用户界面。

设计原则:即整个设计规范所要遵循的全局规则,为设计提供方向指导。以下给出几个例子:

设计语言:包括色彩,文字、图标等

组件库:分为基础组件(按钮,下拉列表等)及业务组件(商品模块)。

在做设计语言和组件库时,有一个基本原则是,少即是多(less is more),用尽可能少的样式来实现设计目标,例如按钮提供三种尺寸即可,在适应不同场景需求的同时保证体验的一致性;另一方面,保持克制的设计规范可以进一步减少设计师的决策时间,提高设计效率。

1.2 理论基础-原子设计

1.2.1 什么是原子设计

原子设计是构建设计规范的核心指导理论。2013年,Brad从化学中得到了灵感,创建了原子设计理论。在化学中,所有的物体都是由原子构成,原子构成分子,进而构成宇宙万物。对应到界面中,界面也是如此,所有的元素都是由文字、颜色等最基本的元素构成的。这些基本元素构成组件,组件构成页面。

原子设计概念的提出使得设计规范演变成为了一种更为高效、科学的设计规范,极大的改善了设计师与前端工程师的工作体验。

1.2.2 原子设计系统的五个层次

原子设计包含五个同时工作的阶段,以更慎重和更具层次的方式创建界面设计规范。

原子:原子是构成界面的最小元素,例如颜色、文本、图标、线条。它们在在界面这个维度上不能再被细分。例如图标,本身是可以继续细分的,但是对于界面而言,图标细分得到的元素是没有任何意义的。

分子:原子按照一定的规律组合就构成了分子,它们拥有独特的功能,例如下拉列表,步进器等。

组织:在界面中组织体现为由分子原子组成的模块,例如数据概览的卡片。

模板:在界面中,模板的体现是原型图,是页面的基本形态,可以让我们快速试错,搭建出一个功能良好的整体。

页面:在模板的基础上将占位符更换为真实内容,并进行视觉优化即为页面。

1.3 为什么需要设计规范

1.3.1 软件危机

在讲述设计规范之前,我想先讲述一个互联网史上的真实事件——软件危机。

19世纪80年代,软件的复杂度进一步提升,大规模软件甚至会由由数百万行代码组成,有数以百计的程序员参与其中,抽象语言解放了程序员的生产力和想象力,人们可以像写文学小说一样随意发挥地去写代码。摆在面前的问题是如何高效且可靠地维护与迭代如此庞大的软件。之后C++、Java等我们熟知的面向对象的编程语言诞生了。

面向对象这种模式有一个很重要的特征是封装。这就好比当你在写王者荣耀的代码时,小兵是出现频率较高的模块,你可以提前把王者荣耀里的一个小兵封装成一个代码块,当你需要用到它时,不必重新一行一行写,只需要把它整体调用即可。

纵观软件发展史,20世纪60年代的第一次软件危机创造了“模块”概念;20世纪80年代第二次软件危机引出了“面向对象编程”,创造了“对象”概念;模块与对象本质上都是对软件进行拆分与封装,只是对象拆分的粒度更大,维度更高。这点与原子设计的原理不谋而合,从色彩文字等基础元素,到按钮、选择器等基础组件、再到典型模块,也是对大型软件的设计元素不同粒度的拆分与封装。

1.3.2 设计规范的优势

设计层面:解决用户体验一致性,减少设计成本,提高设计效率,使得设计师可以快速承接新需求。沉淀设计资产,使得设计更加持续地输出价值,减少一次性设计,同时使设计师从样式中解放出来,站在更高的层面上来思考业务与体验。

开发层面:与设计规范同步形成研发资产,避免重复造轮子,保证代码质量,降低维护和拓展的成本。

测试层面:避免重复的无意义走查。之前遇到过一个深色模式的需求,尽管只换了颜色,但是测试仍然把所有组件都测试了一遍,加上重复的设计、开发量,导致原本一个很简单的需求,居然花费了12人天的工作量。

产品层面:提高产品迭代与优化效率,降低试错成本。

协作层面:降低不同设计师之间以及设计师与开发工程师之间的沟通成本。

1.4 为什么要自己做设计规范

这个时候可以会有小伙伴问,目前市面上有这么多的第三方设计规范,例如antdesign,element,有必要自己重复造轮子做一遍吗?答案是非常有必要。原因如下:

B端自身的业务性决定了市场上没有万能的设计规范,那些设计规范的组件并不能100%满足我们产品的需求。另外一方面使用封装好的第三方设计规范,在此基础上进行修改,效率很低,适配的复杂度和重新开发相差无几。

大家都在使用第三方设计规范时,产品的同质化便不可避免。为了避免这种情况发生,我们必须要从设计语言开始,设计自己的规范。

那些大厂的成熟的组件库该如何用呢?我认为应该把它当成一个字典,有不会的地方,可以去参考人家的成熟的解决方案。

1.5 设计规范的落地

1.5.1 落不了地的原因

1.设计层面:

a. 组件扩展性弱:有的设计师做出来的组件虽然看着很好,但是实际上使用时,适配效率很低,用组件去扩展和重新做的效率差不多。

b. 脱离业务:大部分时候设计师手中都有任务,于是这个任务就落在了实习生的肩上,但是实习生不了解业务,做出来的是空中楼阁,抛开业务谈设计规范的都是耍流氓。

c. 缺乏开发思维:设计师不了解开发的实现方式,可能会做出来开发较难实现的组件。

2.开发层面

缺少开发资源:设计规范的作用是巨大而缓慢的,不能即时产出很大的价值,另外一方面,设计规范的落地会增加开发工程师很多的工作量,且无法量化收益。这也导致很多时候无法争取到足够的开发资源来做这件事,导致达不到预期的效果。

1.5.2 如何落地

说完了落不了地的原因,那么如何落地呢?我认为要从以下四个方面来推进:

写一份设计规范的价值的提案给领导,争取到足够的开发资源。

借鉴敏捷开发的思想,小步迭代快速推进,将设计规范的覆盖放在每次迭代过程中。

把设计规范的开发交给熟悉业务的设计师来做,通过业务提炼复用率高的典型元素,优先开发,最大化投入产出比。

设计师在做设计规范时,要不断与开发工程师沟通,保证设计规范的还原度。

B端UI界面的视觉设计是一种偏向与排版的设计类型,而其中对于文字的使用更是重中之重。文字包括字体,字重,字号,行高、颜色五个属性。一般情况下,字体采用系统自带的字体(例如苹方、微软雅黑、思源黑体),另外对于B端来说,一般都会有较为重要的数据,这时可以采用特殊字体给与一定的强调,最常用的便是DINpro。还有一点要注意,我们使用的字体一般是基于用户有什么字体,而由于win和Mac默认字体不同,所以要提前预留好字体风格类似的多种字体。并且可以设置多个字体,通过逗号隔开,如果第一个字体用户没有,那么会自动替换成下一个字体。

字号上,精简为主,可以用字重和颜色来表现层级,就不要用字号来体现。淘宝在2019年的改版中便升级了这一点。将原来的11个字体层级缩减至了7个。

行高上,我们目前采用的方案是行高是字体行高为150%字号,取4的倍数。

但是目前会遇到额外间距的问题。

前段时间谷歌发布了新的CSS更新“”leading trim,可能会是之后的行高解决方案。感兴趣的小伙伴可以点击链接了解一下(https://blog.csdn.net/weixin_39781930/article/details/111576051)

字重上,以开发的视角来看的话,包括从100-900的九个字重。一般我们只采用regular、medium、semibold三个字重。

3.1 基本介绍

3.1.1 色彩的作用

B端产品中,颜色不仅仅用来传达品牌调性,更多的是用来传达以下信息:

反馈信息 通过不同的颜色给予信息反馈,例如红色代表错误信息,绿色代表成功信息。

突出层级 通过色彩可以对内容信息进行分层级展示,提高用户读取信息的效率。

表明状态 通过颜色来区分某个事物处于何种状态。

3.1.2 组成

在真实的设计场景中,对色彩的复杂度要求是非常高的。色彩规范应该基本覆盖一套产品对用色的所有场景。

一套完整的色彩规范,包括品牌主色、语义色、中性色。

品牌主色:通常,一套产品只有一个品牌主色,是界面中出现最多的颜色,在需要用色强调而且没有其他要求时,一般都会选择主色,例如tab的选中态,图表的颜色等。

语义色:即功能色,借助人们的对色彩的心理模型,帮助人高效获得信息。例如绿色代表通行、成功,红色代表禁止、错误,橙色代表警告、

中性色:除文字外,中性色还被大量运用在分割线、边框、背景等场景中。

3.1.3 色彩系统的原则

理性的

      我们在选色时,尽可能避免个人的设计风格,减少配色的主观性,理性有逻辑地选色。

可扩展的

      使用这种选色方法可以扩展生成更多的颜色,以适应不同的变化。

和谐的

       色彩规范中的颜色互相搭配使用时,应该是和谐的。

3.2 如何制作色彩规范

在开始制作色彩规范之前,先介绍一下HCL色彩空间。

HCL (Hue-Chroma-Luminance) 与 RGB、HSB一样同属色彩空间的一种,因为最早由国际照明协会 CIE 提出,又被称作 CIELch。

目前大家常用的色彩数值可视化的色彩空间是HSB,设计师可以通过H(色相),S(饱和度),B(明度)三个数值来量化色彩,实现理性配色。但是传统的HSB色彩空间的缺点是,明度数值是基于计算机元件而言,而非人眼。另外,计算机的明度与人眼感觉到的明度并非线性匹配,这就导致在不同颜色中,即使色相相同,我们感觉到的明度(即感官明度)也是不一致的。而HCL就避免了这个缺点,在HCL中,只要两种颜色的L相同,感官明度就是相同的,HCL可以完美的量化我们对色彩明度的感觉。但是目前主流的设计软件基本上不支持HCL色彩空间配色,因此要借助插件或者网站。这里给大家推荐Figma的一个插件:HCL color。不用figma的小伙伴可以去这个网站http://tristen.ca/hcl-picker/#/hcl/12/1.03/000000/F69877。

3.3 落地

落地分为两个方面:设计方面和开发方面。

3.3.1 设计方面

将颜色生成样式库,并规定设计同事不可以手动调色,只可以从设计规范中取色。

3.3.2 开发方面

在前期与开发同事沟通,将每个颜色定义为一个变量,在代码中不使用具体的色值,而是例如red-100的的色值,这样做的好处是,

在需要替换某个色值时,只需要在底层对变量改变即可实现全局的更改,提高了很多效率。

开发同事完全从库中取色,保证了色彩的准确性,提高了设计稿的落地率。

现实生活中的物体不可完全重叠,当光打过来时,每个物体都会产生阴影。这是我们理解物体的层叠关系的重要依据。依据现实中的这一行为,我们把阴影规范挪到屏幕世界中,使得用户更容易理解我们的系统。阴影规范提供给了我们另一个表达元素区别的维度,不同的阴影清楚地传达了不同的交互状态。某一对象在屏幕中的高度视觉表现为其阴影,阴影越大,高度越高。但是生活中真实的阴影错综复杂,我们不可能也没必要完全复刻,我们只需要能够表达出元素层级即可。与按钮相同,我们将阴影分为三个等级,分别为,S、M、L。

S:突出组件悬停效果,表示可供性。对于这个数据概览卡片来说,鼠标移入移出时阴影的显示与隐藏提供了一个交互可能性,表明它是可以点击交互的。

M:给下拉列表,气泡提示等使用的阴影。因为这些元素是与由底层元素展开而来的,但又不属于底层元素,所以将中等层级的阴影给了这些元素。

L:模态组件阴影。例如弹窗。当弹窗出现时,弹窗位于绝对的最顶层,所以阴影最大。

圆角是用一段与图形两边相切的圆弧替换原来的直角,圆角的大小用圆弧的半径R表示。在界面中运用圆角主要有以下两个好处:

亲和感。我们倾向于“避免尖锐的边缘,因为在自然界中它们可能会构成威胁”。运用圆角矩形能给我们带来亲和感,圆角越大,亲和感越高。

辨识度。相对于没有圆角,人可以更快的辨识圆角矩形。

对于组件库来说,我们可以把组件比喻为积木,而布局则是把积木搭建为各种不同成品的图纸。

6.1 盒子模型

6.1.1 设计师为什么需要了解盒子模型

在介绍布局之前,先介绍一下盒子模型。虽然盒子模型是前端开发中的一个概念,但是了解一些前端知识对我们设计的落地以及与前端的沟通上大有裨益。我们可以带着盒子模型的思维去做设计,这样开发人员拿到设计稿后,更容易了解我们的布局逻辑,降低沟通成本,提高落地率。

6.1.2 盒子模型是什么

盒子(box)模型是开发中经常用到的CSS模型,我们日常所见到的界面都是由一个一个的盒子拼接而成的。打开安卓手机的开发者选项中的显示布局边界,便可以看到手机上的各个盒子的排列;在电脑浏览器打开检查视图,也可以看到每个元素对应的盒子。我们可以理解为开发同事都是先画一个一个的盒子,然后在盒子里填充,也与我们提供的矩形切图相对应。并且盒子间存在嵌套情况,几个小盒子可以作为一个大盒子的内容。

以我们的生活来举例的话,例如我们去买月饼,大盒子里装了四个小盒子,每个小盒子里是一个月饼。

6.1.3 设计师如何利用盒子模型

了解了盒子模型后,我们在设计时,该如何利用呢?

做设计时,对任何元素都尽量用一个矩形给他封装,这样子前端在定位元素和确定间距时可完美实现设计稿的内容。

而前段时间figma更新的auto layout 功能与盒子模型基本完美对应。我们在设计时可以使用这个让开发更容易get我们的设计稿,减少沟通时间。


以标签页为例,我们设计时,不只是画个横线与文字就行了,这样开发无法理解到设计稿,后面还会继续找我们询问触控热区。

6.2 导航

导航将网站的信息架构分组归类展示给用户,方便用户到达想去的界面。

6.2.1 顶部导航

优点:

符合人眼浏览网页的视觉动线,给用户提供更沉浸式的浏览体验。

缺点:

扩展性差:由于顶部空间有限,无法承载太多的菜单项,另外由于水平菜单的特性决定了无法承载太多的层级,当扩展至三个或四个层级时,顶部导航的易用性极差。

通用性较差:同样受空间的限制,菜单项字数被严格限制。

适用产品:

整体结构无论是广度还是深度均较简单且之后不会扩展很多功能的产品。

6.2.2 侧边导航

优点:

扩展性好:侧边导航是以树形控件的方式来表示的,相对于顶部导航,无论是数量和层级,扩展性均较好。

方便寻找:由于纵向浏览无需把每个单个菜单完整浏览,相对水平菜单,定位更快。

缺点:

沉浸感低:由于用户在浏览内容的过程中,不可避免会被左侧常驻的导航栏打断视线流,阅读沉浸感较低。

适用产品:

目前结构不是非常复杂但之后会迭代增加很多功能的产品。

6.2.3 混合导航

优点:

扩展性好:由于增加了-个顶部的一级菜单,扩展性是三者中最好的。

缺点:

交互路径长:除了和侧边导航-样存在沉浸感低的问题,由于每个菜单项都需要点击顶部和侧边两次,操作效率低。

占用空间大:在B端产品中,界面空间寸土寸金,混合导航常驻的两个导航占用了较多的空间。

适用产品:

目前结构已经非常复杂的庞大产品。

6.3 栅格

6.3.1 栅格介绍

6.3.1.1 来源

栅格系统原本来源于平面设计,早在20世纪初,德国、荷兰、瑞士等国的平面设计师们发现通过维持视觉秩序,从而使版面能更加清晰有效地传递信息,二战后这种理念在瑞士得到了良好的发展。有兴趣的小伙伴可以去看下由瑞士设计师大师Josef Miller—Brockmann (约瑟夫.米勒-布罗克曼)所著的《平面设计中的网格系统》一书。

6.3.1.2 优势

高效:将布局标准化,可减少设计决策的时间,让设计师专注于内容.上的设计呈现。

响应式布局:由于web端尺寸多样,使用栅格系统可以做到自适应布局(在面对多个分辨率的系统时,无需设计多套方案,仅需设计一套来适配即可)

美观:提高内容的规律性,让设计更有秩序和节奏感,赋予界面数学逻辑美感,提高用户的阅读和浏览效率,为用户提供更好的体验。

协作:由于栅格系统的可复用性,多个设计师合作时,可以共用-套栅格系统,提升整体布局的统-性。同时也避免了设计与开发的反复确认的情况,使得部门内部与部门间沟通更顺畅。

6.3.3 组成与原理

栅格系统包括页边距,列和水槽。

页边距:指内容区与页面的边距。

列和槽:列是承载内容的容器,水槽是两个列(即内容)之间的间距。在前端视角中列宽是根据百分比而不是固定值定义的。通常说的栅格数就指的列数。水槽越宽,页面留白越多,呼吸感越强。

自适应原理:在网页应用的设计中较为常见的一种响应方式,当屏幕宽度改变时,页边距和水槽宽不变,列宽自适应。

计算公式:以24栅格(即有24列)为例,页面自适应部分总宽度: 24*列宽 +23*水槽宽+2*页边距。

6.4 间距

在设计间距系统中,我们一般会基于8点网格系统和亲密性原理规定几个典型值。例如4,8,(12,)16,24,32……。遇到间距时在这些值中选取合适的即可。另外一般我们会使得大模块的纵向间距与栅格系统中的水槽大小相同。

7.1 图标重要性

当一个界面完全由文本构成时,用户被迫阅读每个文字来找到自己想要的信息。而引入图标后,降低了用户的认知负荷,帮助用户更快导航,提高用户使用产品的效率。另外一方面、设计精致风格统一的图标提高界面的美观度的同时,也为用户带来了连贯一致的使用体验。

7.2 图标规范的内容

尺寸:由于不同形状(三角形,圆形、长方形、正方形)具有不同的视觉大小,仅仅规范图标的大小是不够的,通常我们会设计一套图标keyline,来保证不同的图标具有相同的视觉大小。

填充/描边:一般的系统功能图标采用描边。工作台的常用功能入口一般采用带背景的填充图标,原因是在空间有限的的区域,太多形状会显得杂乱,另一方面面型图标的视觉面积较大,短时间内更加容易识别。

除此之外,还包括圆角、端点、线宽、倾斜角度等其他规范。

7.3 落地

在产品中,图标通常有多种尺寸,我们一般会为每个尺寸的图标各创建一个frame来进行管理,其中,我们会把同一个图标的填充版和描边版创建为一个组件集,这样在调用时可以直接控制图标的填充和描边,在做有选中态和非选中态的组件时尤为方便。

另外,在命名上,我们会用图标的内容为它命名而非表意,例如一个灯泡的图标,我们会直接命名为灯泡而非创意。

7.4 图标库推荐

在这里给大家推荐几个我常用的图标库,在来不及画图标时,可以先用这些迅速建立起一个图标组件库。之后有时间了再慢慢更新为自己的图标。

Iconfont:国内功能很强大且图标内容很丰富的矢量图标库,提供矢量图标下载、在线存储、格式转换等功能。特点是图标非常丰富。

Remixicon:Remix Icon 是一套面向设计师和开发者的开源图标库。质量很高,风格中性大气,因此适用于很多风格的项目,分为“线性图标”和“面型图标”两种风格。相比于 Material Icons,RemixIcon 看起来风格会更统一、简约且精致硬朗一些。

IconPark:这是字节CUX设计团队出品和维护的开源图标库,如今已对外开放使用,特点是图标大小,线宽等多个属性均可设置,自由度较高。

8.1 文案是什么

文案是我们的产品与用户交流的最基础最简单的沟通工具。文案存在于产品的各个地方,例如按钮文案告诉用户按钮的作用,轻提示文案告诉用户反馈结果。对于新用户来说,文案肯定比图标易理解,另外一方面,文案更不容易产生歧义,例如一个图标可以会有多种意思,而文案相对更精确。

8.2 文案规范的重要性

伴随着B端的业务功能的快速迭代,由于设计师、产品经理的水平、文案风格、对文案的重视程度不同,导致系统内部文案积累了很多问题,最明显的问题,同一场景文案不一致,会给用户带来体验的割裂感,增加用户使用产品的认知成本。

而通过构建文案规范,可以规范文案的使用和编写,提高文案的质量,给用户带来连贯一致的使用体验。

8.3 文案撰写的原则

这里给大家介绍一些产品文案通用的一些原则,包括,准确,简洁、用户视角

8.3.1 准确原则

8.3.2 简洁原则

8.3.3 用户视角原则

8.4 落地

一般情况下,文案没有专门的人来负责,国外可能会有“UX Writer” 这样的专门职位来负责,在国内一般会交给体验设计师来负责。

文案规范的落地分为四步:

1.    遍历页面,列出所有的文案

2.    梳理相同或相似场景的文案,将文案归类整理

3.    根据实际情况制定产品文案的原则,并撰写一部分典型场景的文案。

4.    输出文档,包含文案撰写原则及典型场景的文案。

9.1 组件库是什么

组件库相当于乐高的一个个积木,通过组件的拼搭可以迅速搭建出一个页面。通常我们将组件库分为基础组件和业务组件两大类,前者是系统通用组件(图标/按钮/输入框等),后者是由业务决定的相对更复杂的组件模块。而对于B端产品和C端产品,二者的组件库又有些许差异。C端的组件库更追求极致的交互和视觉体验,因此需要考虑视觉、性能、实现、兼容性,另一方面,C端会根据活动、节日切换不同的主题,也要考虑组件视觉上的个性化扩展。对于B端而言,组件库更看重可复用性和稳定性,保证可以支持业务快速迭代。另外B端会涉及到各种各样的数据录入与展示,因此相对更高的要求是大而全,覆盖面广。

9.2 如何做组件库

9.2.1 确定组件库的内容

新产品

对于新产品来说,业务体量较小,较难抽取共性,组件也不全面,因此较好的方式是参考大厂的组件库确定要做哪些组件,它们的相对成熟,参考价值较高。

成熟产品

对于已经成熟的产品来说,我们可以直接遍历页面,穷举出所有用到的组件,除基础组件外,提炼出复用率高的业务组件进行结构化和组件制定。

9.2.2 搭建每个组件

以警告提示(Alert)为例,演示单个组件的建立方法。

   1. 定义组件

       根据业务定义警告提示的使用场景,警告提示用于重要信息的提醒,采用非浮层的方式展现在页面顶部,被动出现,且不会自动关闭。

2. 拆分组件

      这一步是将组件拆分为元件。对警告组件进行拆分后得到如下:

   3. 重组输出

       根据业务场景,我们把各个元件重组为组件,建成组件集,并定义各种组件的使用规则。

9.2.3 输出文档并替换到产品中

在组件库建立完成后,只有在日常设计中真正使用组件库,提高组件库在设计稿中的覆盖率,才能真正达到组件库的效果。这就要求我们要输出一份完整的组件库描述文档,在团队中进行推广,加强设计团队的公用意识。另外,我们还要与开发工程师配合逐步完成现有页面的组件替换。

9.2.4 定期维护组件库

组件库的内容并非一成不变,而是在不断地更新,以保证所包含的组件都是最新和有用的。与其他数据一样,组件也会有增删改。

增:当有新的组件产生时,我们需要通过判断它的拓展性和复用率,以确定是否将它入库。

删:随着产品的不断升级迭代,如果某个组件已经不用或复用率很低时,我们可以考虑是否要将它删除。

改:不可避免的,组件会随着业务而进行升级,我们可以通过数据埋点和A/B test的方式来确定某个组件是否要进行改动。

10.1 PC端设计规范

Ant Design

Ant Design是由蚂蚁集团体验技术部经过大量的项目实践与总结,逐步打磨出来的,基于「自然」、「确定性」、「意义感」、「生长性」四大设计价值观,通过模块化解决方案,降低冗余的生产成本,让设计者专注于更好的用户体验,是非常完整的一套设计规范。

Zent 

Zent是有赞 PC 端 Web UI 规范的 React 实现版本,提供了一整套基础的 UI 组件以及常用的业务组件。通过 Zent,可以快速搭建出风格统一的页面,提升开发效率。目前有 50+ 组件,这些组件都已经在有赞的各类 PC 业务中广泛使用。

Element 

Element是由饿了么公司前端团队开源一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的组件库,提供了配套设计资源。

AT-UI 

AT-UI 是一款基于 Vue 2.x 的前端 UI 组件库,主要用于快速开发 PC 网站产品,在众多的的组件库中,AT-UI 属于视觉风格比较清新的一款。

10.2  移动端设计规范

Vant

Vant 是有赞前端团队开源的移动端组件库,于 2017 年开源,已持续维护 4 年时间。Vant 对内承载了有赞所有核心业务,对外服务十多万开发者,是业界主流的移动端组件库之一。目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本。

NutUI-JDL

NutUI-JDL 是一套基于京东物流视觉规范的移动端组件库,包含了36+高质量组件和详尽的文档和实例。

本次的分享到这里就结束了,希望可以对大家有帮助。由于文章字数较多,笔者几经修改,仍不免有疏漏错误之处,如发现错误,请读者于评论区或私信指出,不胜感激。

在快节奏的洪流中,保持设计的初心,做有灵魂的设计。


以上文章来源于MICU设计 ,作者JIN石为KAI

链接:https://www.zcool.com.cn/article/ZMTIxODExMg==.html



作者:混沌小肉团01
链接:https://www.jianshu.com/p/26afb8bf783c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


公共DNS服务器IP地址大全
名称各省公共DNS服务器IP大全
114 DNS114.114.114.114114.114.115.115
阿里 AliDNS223.5.5.5223.6.6.6
百度 BaiduDNS180.76.76.76
DNSPod DNS+119.29.29.29182.254.116.116
CNNIC SDNS1.2.4.8210.2.4.8
oneDNS117.50.11.1152.80.66.66
DNS 派
电信/移动/铁通
101.226.4.6218.30.118.6
DNS 派 联通123.125.81.6140.207.198.6
Cloudflare DNS1.1.1.11.0.0.1
Google DNS8.8.8.88.8.4.4
IBM Quad99.9.9.9
DNS.SB185.222.222.222185.184.222.222
OpenDNS208.67.222.222208.67.220.220
V2EX DNS199.91.73.222178.79.131.110
全国各地电信DNS服务器IP地址大全
名称各省电信DNS服务器IP大全
安徽电信 DNS61.132.163.68202.102.213.68
北京电信 DNS219.141.136.10219.141.140.10
重庆电信 DNS61.128.192.6861.128.128.68
福建电信 DNS218.85.152.99218.85.157.99
甘肃电信 DNS202.100.64.6861.178.0.93
广东电信 DNS202.96.128.86202.96.128.166
202.96.134.133202.96.128.68
广西电信 DNS202.103.225.68202.103.224.68
贵州电信 DNS202.98.192.67202.98.198.167
河南电信 DNS222.88.88.88222.85.85.85
黑龙江电信219.147.198.230219.147.198.242
湖北电信 DNS202.103.24.68202.103.0.68
湖南电信 DNS222.246.129.8059.51.78.211
江苏电信 DNS218.2.2.2218.4.4.4
61.147.37.1218.2.135.1
江西电信 DNS202.101.224.69202.101.226.68
内蒙古电信219.148.162.31222.74.39.50
山东电信 DNS219.146.1.66219.147.1.66
陕西电信 DNS218.30.19.4061.134.1.4
上海电信 DNS202.96.209.133116.228.111.118
202.96.209.5180.168.255.118
四川电信 DNS61.139.2.69218.6.200.139
天津电信 DNS219.150.32.132219.146.0.132
云南电信 DNS222.172.200.6861.166.150.123
浙江电信 DNS202.101.172.3561.153.177.196
61.153.81.7560.191.244.5
全国各地联通DNS服务器IP地址大全
名称各省联通DNS服务器IP大全
北京联通 DNS123.123.123.123123.123.123.124
202.106.0.20202.106.195.68
重庆联通 DNS221.5.203.98221.7.92.98
广东联通 DNS210.21.196.6221.5.88.88
河北联通 DNS202.99.160.68202.99.166.4
河南联通 DNS202.102.224.68202.102.227.68
黑龙江联通202.97.224.69202.97.224.68
吉林联通 DNS202.98.0.68202.98.5.68
江苏联通 DNS221.6.4.66221.6.4.67
内蒙古联通202.99.224.68202.99.224.8
山东联通 DNS202.102.128.68202.102.152.3
202.102.134.68202.102.154.3
山西联通 DNS202.99.192.66202.99.192.68
陕西联通 DNS221.11.1.67221.11.1.68
上海联通 DNS210.22.70.3210.22.84.3
四川联通 DNS119.6.6.6124.161.87.155
天津联通 DNS202.99.104.68202.99.96.68
浙江联通 DNS221.12.1.227221.12.33.227
辽宁联通 DNS202.96.69.38202.96.64.68
全国各地移动DNS服务器IP地址大全
名称各省移动DNS服务器IP大全
江苏移动 DNS221.131.143.69112.4.0.55
安徽移动 DNS211.138.180.2211.138.180.3
山东移动 DNS218.201.96.130211.137.191.26


作为一枚Java程序员,需要掌握哪些技术和工具才能完成一个JavaWeb项目呢?今天罗列一些常用技术和工具,这些技术都是我这10年工作中用的比较多的,我知道技术栈远不止这些,本人只列自己熟悉和用的最多的,完成一个项目绝对够用了。说这么多技术不是让大家都要熟悉,有些太老的现在也用的少了甚至不用了,本人主要结合我这10年开发经验告诉大家JavaWeb的常用技术栈。

下面这张是技术栈思维导图:

技术栈

什么是技术栈?
举个例子:
开发一个普通管理系统,会用到Sprin Boot+MyBatis+Spring+Mysql+Redis+RabbitMq+Nginx+Vue+Shiro+html+等等,这些技术合起来就可以称为技术栈。

我将技术栈大致分为5大块:前端、后端、中间件、数据库和工具。

前端

JSP

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。

JSP本质上是一个servlet,主要用于实现Java web应用程序的用户界面部分。

<html>
    <head>
           <title>第一个 JSP 程序</title>
    </head>
    <body>
           <%
                  out.println("Hello World!");
           %>
    </body></html>

JSP这种网页技术我猜5年以下的程序员基本没接触过,10年前我接触的项目前端基本都是采用的JSP技术,jsp配合各种html+jquery/JavaScript+css完成前端页面开发。

前端框架

DWZ、EasyUI、EXT、BootStrap、KendoUI 都是基于基于 HTML、CSS、JavaScript/jquery的一些富文本客户端UI框架,在当时简直是后端开发人员的福音。这些框架最大的特点就是官网上提供了各种组件的使用方法,后端人员只要套到JSP页面中,进行数据渲染即可。这些UI框架风格基本已经固定,更适合开发一些管理类系统,都包括:强大的数据源,通用的拖拉(Drag-and-Drop)功能,模板,和UI控件。

DWZ

是中国人自己开发的基于jQuery实现的Ajax RIA开源框架,设计目标是简单实用,快速开发,降低ajax开发成本。

官网:https://jui.org/

EasyUI

easyui是一种基于jQuery的用户界面插件集合,为创建现代化,互动,JavaScript应用程序,提供必要的功能。使用easyui你不需要写很多代码,你只需要通过编写一些简单HTML标记,就可以定义用户界面,为网页开发的时间和规模。

官网;http://www.jeasyui.com/

EXT

ExtJS是基于YUI(雅虎用户界面)的sencha的JavaScript框架和产品,它基本上是具有现代UI的桌面应用程序开发平台。

中文官网:http://extjs-doc-cn.github.io/ext4api/#!/api/Ext

BootStrap

bootstrap是Twitter推出的一个用于前端开发的开源工具包

中文官网:https://www.bootcss.com/

KendoUI

是一套 JavaScript 函式库,提供抽象化、可自订主题的 GUI 控制项与动画效果。基于 jQuery JavaScript 函式库,可用来建构互动式的 Web 应用

官网:http://www.kendoui.io/

FreeMarker

FreeMarker是一个免费的模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写的,用来生成HTML Web页面,特别是基于MVC模式的应用程序。通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)

FreeMarker不是一个Web应用框架,FreeMarker与容器无关,也可以在模板中使用JSP标记库。

<html><head>
  <title>Welcome!</title></head><body>
  <h1>Welcome ${user}!</h1>
  <p>Our latest product:  <a href="${latestProduct.url}">${latestProduct.name}</a>!</body></html>

html

上面很多前端框架都是基于html的,需要你有js/jq、css基础,这是所有前端框架的基础。因为光框架有时并不能满足我们的需求,有时需要对框架无法实现的功能需要在框架基础上调整;还有这个飞速发展的互联网时代,对前端的要求越来越高,原生html得到了快速发展,基本所有前端效果使用原生时可以实现的。

VUE

vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。

在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。

VUE+elementUI目前使用最多的,尤其是开发一些后台管理系统还是比较简单便捷的。

后端

servlet

servlet是Server Applet的简称,翻译过来就是服务程序,简单的讲就是是运行在服务器上的一个小程序,用来处理服务器请求的。我们通过浏览器访问一个应用,在这个过程中,我们的浏览器发送访问请求,服务器接收请求,并对浏览器的请求作出相应的处理,这就是我们熟悉的B/S模型(浏览器-服务器模型).而servlet就是对请求作出处理的组件,运行于支持Java的应用服务器中。如图如是:

struts

struts主要是指struts1和struts2,是经典的MVC框架,除去一些老项目,现在用的越来越少了。但struts1和struts2还是有区别的,主要区别二者本质不一样。

struts1:通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

struts2:以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。

最经典的组合strutsMVC+SPring+Hibernate,号称SSH,当年都是面试必问的技术。

Spring

Spring框架是一个开源Java应用框架,解决了开发者在开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于应用程序,也可以和Struts、Webwork等众多Web框架组合使用。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。

持久层框架

jdbc

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

早期项目大部分都是通过对JDBC封装来操作数据库,实现增删改查,对性能考虑也不多,随时间推移不断衍生出很多框架,例如:mybatis,hibernate等。

ibatis

iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。

iBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。

mybatis

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。

MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

MyBatis-Plus

Mybatis 增强工具包 - 只做增强不做改变,简化CRUD操作

JPA

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

Spring Boot

SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

分布式/微服务

Spring Cloud

Spring Cloud 为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性 Token、全局锁、决策竞选、分布式会话和集群状态)操作的开发工具。使用 Spring Cloud 开发者可以快速实现上述这些模式。

Spring Cloud 的 GitHub 主页:https://github.com/spring-cloud

dubbo

Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。

主要核心部件:

Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制

RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能

Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

Spring Cloud Alibaba

Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。

安全框架

shiro

Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。

Spring Security

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

oauth2.0

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

OAuth 2.0 是目前比较流行的做法,它率先被Google, Yahoo, Microsoft, Facebook等使用。之所以标注为 2.0,是因为最初有一个1.0协议,但这个1.0协议被弄得太复杂,易用性差,所以没有得到普及。2.0是一个新的设计,协议简单清晰,但它并不兼容1.0,可以说与1.0没什么关系。

项目管理

maven

Maven 是 Apache 下的一个纯 Java 开发的开源项目。利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。

ant

ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。在实际软件开发中,有很多地方可以用到ant。

gradle

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。

服务器软件

tomcat

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选

Apache

Apache(阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一

Jetty

Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。

weblogic

WebLogic Server是专门为企业电子商务应用系统开发的。企业电子商务应用系统需要快速开发,并要求服务器端组件具有良好的灵活性和安全性,同时还要支持关键任务所必需的扩展、性能、和高可用性。WebLogic Server简化了可移植及可扩展的应用系统的开发,并为其它应用 系统和系统提供了丰富的互操作性。

nginx

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强。

中间件

缓存

缓存是现在系统中必不可少的模块,并且已经成为了高并发高性能架构的一个关键组件。缓存的主要作用:提升性能缓解数据库压力

Redis

Redis是一个开源的内存数据结构存储,用作数据库、缓存和消息代理。提供诸如字符串、哈希、列表、集合、带范围查询的排序集合、位图、超日志、地理空间索引和流等数据结构。具有内置的复制、Lua脚本、LRU逐出、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster的自动分区提供高可用性。

MongoDB

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

Memcached

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统,用来提高Web应用扩展性的重要因素。是一个基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。简洁而强大,它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

差异性我就不多说了,简单说下他们的使用场景:

  • Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。

  • Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。

  • MongoDB:主要解决海量数据的访问效率问题。

搜索

solr

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

Elasticsearch

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口

二者主要区别

es基本是开箱即用,非常简单,Solr略微复杂。

Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。

Solr 查询快,但更新索引时慢(即插入删除慢),ES建立索引快(即查询慢),即实时性查询快。

ELK

之所以推荐ELK是因为面对分布式微服务情况下,会显示出他的威力,不管是数据收集、数据处理、还是数据分析可以节约很多时间。ELK是Elasticsearch + Logstash + Kibana三个开源软件的组合,但是通常为了提高性能需要借助kafka,利用Filebeat进行日志收集,下面这个架构图是我做过的一个日志服务平台。

定时任务

说定定时任务大家可能都接触过,例如Spring自带的定时任务SpringTask,但是SpringTask是存在很多问题的,例如:最致命的一个问题就是一旦定时抛出异常,生命就结束,下一次不会再执行。复杂业务中使用起来是不方便的,这里推荐两个定时任务框架Quartz和xx-job,第三方的功能比较强大,好用。

Quartz

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能:

  • 持久性作业 - 就是保持调度定时的状态;

  • 作业管理 - 对调度作业进行有效的管理;

xx-job

XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等....
Quartz作为开源作业调度中的佼佼者,是作业调度的首选

Quartz在集群环境下只能通过API的方式对任务管理,同时,系统侵入性相当严重,而XX-JOB可以完美解决集群下任务额管理。所以,可以根据自己业务情况选择合适定时任务框架,

配置中心

什么是配置中心?

集中将应用系统中对配置信息的管理作为一个新的应用功能模块,区别与传统的配置信息分散到系统各个角落方式,进行集中统一管理,并且提供额外功能。尤其是在微服务架构中,是不可或缺组件,甚至是必要组件之一。

为什么要使用配置中心?

在微服务体系中,服务的数量以及配置信息的日益增多,比如各种服务器参数配置、各种数据库访问参数配置、各种环境下应用配置信息的不同、配置信息修改之后实时生效等等,传统的配置文件方式或者将配置信息存放于数据库中的方式已无法满足开发人员对配置管理的要求。常见的配置中心中间件有:SpringCloud Config ,Nacos,apollo等。

SpringCloud Config

2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合,Spring Cloud Config支持通过/bus/refresh端点的destination参数来指定要更新配置的机器,不过整个流程不够自动化和体系化。相对于Apollo和Nacos还是比较弱的。

Nacos

2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。Nacos使用起来相对比较简洁,在对性能要求比较高的大规模场景更适合。此外,Nacos除了提供配置中心的功能,还提供了动态服务发现、服务共享与管理的功能,降低了服务化改造过程中的难度。

apollo(阿波罗)

2016年5月,携程开源的配置管理中心,具备规范的权限、流程治理等特性,Apollo可以直接在控制台上点灰度发布指定发布机器的IP,接着再全量发布,做得比较体系化。

三者对比如何选择:

核心功能: Apollo和Nacos相对于Spring Cloud Config的生态支持更广

实时推送: Nacos和Apollo在配置实时推送链路上是比较简单高效的,Spring Cloud Config比较复杂。

高可用部署: Nacos的部署结构比较简单,运维成本较低。Apollo部署组件较多,运维成本比Nacos高。Spring Cloud Config生产高可用的成本最高。

监控

服务器监控是实时掌握服务器工作状态,并在需要时可以随时调用监控记录进行查看。

SpringBootAdmin

Spring Boot Admin用来管理和监控Spring Boot应用程序,通过UI来查看应用程序的状态,例如Spring Beans,系统属性,线程,http的调用情况等有限状态。

Druid

我知道Druid更多的用途就是连接池,其实他还有一个对SQL监控功能。

SkyWalking

Skywalking是由国内开源爱好者吴晟(原OneAPM工程师,目前在华为)开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点。是一款基于分布式跟踪的应用程序性能监控系统。另外社区还发展出了一个叫OpenTracing的组织,旨在推进调用链监控的一些规范和标准工作。

存储

把涉及到数据库相关或者可以作为数据仓库的中间件都归到一起了。

MyCat

Mycat是一个开源数据库中间件,是一个实现了MySQL协议的的数据库中间件服务器,我们可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问Mycat,而Mycat再使用用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,包括SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储;一般地,Mycat主要用于代理MySQL数据库,虽然它也支持去访问其他类型的数据库;

Mycat官网:http://www.mycat.io/

Canal

我们先看官网的介绍

canal,译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

这句介绍有几个关键字:增量日志,增量数据订阅和消费

这里我们可以简单地把canal理解为一个用来同步增量数据的一个工具

接下来我们看一张官网提供的示意图:

sharing-jdbc

定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

主要功能

  • 分库 & 分表

  • 读写分离

  • 分布式主键

zookeeper

ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

事务

这个事务更多指的是分布式事务处理插件。

Apache ShardingSphere

Apache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。

Seata

Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来。是阿里开源的分布式事务框架,属于二阶段提交模式。

消息队列

什么是消息队列

消息队列是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。目前使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ。

为什么需要消息队列

1.通过异步处理提高系统性能(削峰、减少响应所需时间);

2.降低系统耦合性;

Kafka

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

RabbitMQ

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

ActiveMQ

ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。

三者区别及其使用场景

特性ActiveMQRabbitMQkafka
开发语言javaerlangscala
单机吞吐量万级万级10万级
时效性ms级us级ms级以内
可用性高(主从架构)高(主从架构)非常高(分布式架构)
功能特性成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好基于erlang开发,所以并发能力很强,性能极其好,延时很低;管理界面较丰富只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。

数据库

该数据库主要是指关系型数据库,是按照数据结构来组织、存储和管理数据的仓库,数据库是存放数据的仓库,是一个系统或者软件必不可少的一部分。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。

所以,现在我们使用关系型数据库管理系统来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

关系数据库管理系统的特点:

  • 1.数据以表格的形式出现

  • 2.每行为各种记录名称

  • 3.每列为记录名称所对应的数据域

  • 4.许多的行和列组成一张表单

  • 5.若干的表单组成database

常见的数据管理系统主要有:oracle、mysql、SQL Server、access、TiDB。

oracle

Oracle Database,简称 Oracle。Oracle 数据库系统是美国 Oracle 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(client/server)的数据库之一。Oracle 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系型数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能,但它的所有知识,只要在一种机型上学习了Oracle知识,便能在各种类型的机器上使用它。

mysql

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。目前也是Oracle 公司来托管。

SQL Server

美国Microsoft公司推出的一种关系型数据库系统。SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。

access

Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。它是微软OFFICE的一个成员, 在包括专业版和更高版本的office版本里面被单独出售。

TiDB

TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。

上面这几个数据库优缺点都比较明显,不在啰嗦了,大家在工作中可以根据自己实际情况选择合适的数据。

工具

开发

IntelliJ IDEA

IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java,Kotlin等少数语言。

eclipse

Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台, 是 Java 的集成开发环境(IDE),当然 Eclipse 也可以作为其他开发语言的集成开发环境,如C,C++,PHP,和 Ruby 等。

MyEclipse

MyEclipse,是在Eclipse 基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java、Java EE以及移动应用的开发。在最新版本的MyEclipse中,配合CodeMix使用支持也十分广泛,尤其是对各种开源产品和主流开发框架的支持相当不错。目前已支持PHP、Python、Vue、Angular、React、Java、Java EE等语言和框架开发。

这三款工具好坏我也不做任何评价,每个工具用户都不少,我周围IntelliJ IDEA和MyEclipse都有,我个人比较喜欢用IntelliJ IDEA。

客户端工具

版本控制

常见的版本空间工具svn和git

svn

TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器。你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。这就是为什么许多人将 Subversion 和版本控制系统看作一种“时间机器”。

git

Git 是用于Linux内核开发的版本控制工具。与常用的版本控制工具 Subversion 不同,它采用了分布式版本库的方式,不必服务器端软件支持,代码的发布和交流极其方便。 Git 的速度很快,这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。

SVN的特点是简单,只是需要一个放代码的地方时用是OK的。

Git的特点版本控制可以不依赖网络做任何事情,对分支和合并有更好的支持(这应该算是开发者最关心的地方)。

数据库

Navicat

Navicat是一套快速、可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。

PLSQL

PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算,PL/SQL 只有 Oracle 数据库有

Redis Desktop Manager

Redis Desktop Manager是一款windows平台下的可视化redis数据库桌面管理工具,使用它你可以查看、删除、修改你的redis数据库数据!

linux远程

XShell

XShell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNET协议。
XShell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。

WinSCP

宝塔

宝塔面板是一个可以安装在服务器上的集成环境,并配套了web管理面板,可以在浏览器上直接控制你的服务器,非常方便。 可以一键创建网站、FTP、数据库、SSL;安全管理,计划任务,文件管理,PHP多版本共存及切换;自带基础网站环境,支持windows系统(apache)和linux系统(apache或nginx)。

SecureCRT

Secure CRT 是一款SSH客户端软件,通过使用内含的VCP命令行程序可以进行加密文件的传输。

postMan

Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。

辅助

Typora+PicGo

Typora+PicGo,最好用的Markdown+最好用的图床工具!如果写博客的可以收藏起来。

notepad++

Notepad++中文版是程序员必备的文本编辑器,Notepad++中文版小巧高效,支持27种编程语言,通吃C,C++ ,Java ,C#, XML, HTML, PHP,JS 等,Notepad++中文版编辑器可完美地取代微软的记事本。

画图

visio

Office Visio 是Office软件系列中的负责绘制流程图和示意图的软件,是一款便于IT和商务人员就复杂信息、系统和流程进行可视化处理、分析和交流的软件。使用具有专业外观的 Office Visio 图表,可以促进对系统和流程的了解,深入了解复杂信息并利用这些知识做出更好的业务决策。常见软件架构、流程图都可以在里面完成。

processon

ProcessOn是一个在线作图工具的聚合平台, 它可以在线画流程图、思维导图、UI原型图、UML、网络拓扑图、组织结构图等等, 您无需担心下载和更新的问题,不管Mac还是Windows,一个浏览器就可以随时随地的发挥创意,规划工作。

官网:https://www.processon.com/

PowerDesigner

owerDesigner是一款非常全面的数据库设计工具。使用PowerDesigner可以快速创建表,支持表与表之间建立关系,界面简洁,功能强大。同时支持将sql脚本导出,多种导出类型任意挑选,简单实用。

Xmind

XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生。作为一款有效提升工作和生活效率的生产力工具,受到全球百千万用户的青睐。

iReport

说到 iReport 不得不先介绍 Jasperreport,Jasperreport 是一个报表制作程序,用户需要按照它制定的规则编写一个 XML 文件,然后得到用户需要输出的格式文件。它支持输出的文件格式包括 PDF,HTML,XML,XLS,CVS 等等。而 iReport 就是一个制作 Jasperreport 的 XML 文件的可视化开发工具。

浏览器

Chrome

Google Chrome是一款由Google公司开发的网页浏览器,该浏览器基于其他开源软件撰写,包括WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

搜狗

搜狗浏览器 由搜狗公司开发,基于谷歌chromium内核,力求为用户提供跨终端无缝使用体验,让上网更简单、网页阅读更流畅的浏览器。

火狐

Mozilla Firefox,中文俗称“火狐”,是一个由Mozilla开发的自由及开放源代码的网页浏览器。其使用Gecko排版引擎,支持多种操作系统,如Windows、macOS及GNU/Linux等

IE

Internet Explorer(简称:IE)是微软公司微软公司推出的一款网页浏览器。原称Microsoft Internet Explorer(6版本以前)和Windows Internet Explorer(7、8、9、10、11版本)。在IE7以前,中文直译为“网络探路者”,但在IE7以后官方便直接俗称"IE浏览器"。

如果做前端开发,这几款浏览器兼容性都得兼顾。很早之前IE浏览器市场是比较大,随着时间推移,谷歌浏览器占据了比较大的市场。我个人日常开发中谷歌用的比较多,特殊情况才会使用其它浏览器。

性能分析

jmeter

JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 服务程序、CGI 脚本、Java 对象、数据库, 等等。

ab

apache bench简称ab,它是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。

MAT

MAT是Java堆内存分析工具,可从http://www.eclipse.org/mat/中下载。

你在成为大神的路上都学习了哪些技术,欢迎留言交流。

本文首发于公众号:Java版web项目


在看|星标|留言,  真爱

来源:

http://www.360doc.com/content/20/0613/14/49290572_918245894.shtml

所谓开源,就是把软件的源代码开放出来,大家都能看到源代码,大家可以一起研究源代码并对软件的进行优化和改进。越来越多的IT公司对开源持开放态度,一方面有了优秀的开源项目,就不用再重复造轮子,可以直接拿来使用;另一方面,自己公司有优秀的自研项目,为了发展壮大可以选择将项目开源,让更多的开发者参与进来,一起努力提升软件的功能!近些年来,国内很多大型IT公司也逐渐推出了一些高质量的开源项目,比如华为开源了鸿蒙系统、腾讯开源了自研的顶级数据库TBase、 阿里开源了自研的科学计算引擎Mars等。

下面,我们先大概的回顾一下红帽公司发布的企业开源现状的调查报告,然后简单的介绍一下最受IT公司青睐的一些开源项目。这些主要是面向企业的应用软件项目,涵盖Web服务器、大数据、云计算、云存储、操作系统、数据库等几大类别。

红帽发布2019年企业开源调查报告

开源技术已被广泛应用于企业中,这一点毋庸置疑。像谷歌和微软这样的科技巨头也承认开源的力量——谷歌云最近与 MongoDB、redis Labs、Neo4j 和Confluent 等公司建立合作伙伴关系便是很好的佐证。但这些企业如何看待开源?为什么选择开源?它们关于开源的下一步打算又是什么?基于以上疑问,红帽发起了“企业开源状态”调查,并于 2019年4 月16日发布了调查报告。

这份报告是对世界各地 950 位 IT 领导者进行访谈后的成果,调查区域包括美国、英国、拉丁美洲及亚太地区,旨在了解不同地理区域的企业开源概况。

企业是否认为开源具有战略性意义?这是红帽最先抛出并且最希望了解的一个问题。

调查结果显示,950 位受访者中,绝大多数人认为开源对企业整体的基础架构软件战略具有战略重要性。事实上,超过 69% 的人表示这非常或极其重要。

另外,在过去的 12 个月中,68% 的企业增加了对企业开源的使用,超过 59% 的企业预计在未来 12 个月内将继续使用企业开源。

今时今日,企业开源也可以取代专有软件,用于从虚拟化到消息总线再到应用服务器等许多不同目的。开源还有助于定义和塑造从容器化到软件定义存储和网络的基础架构的新方法。

其中,使用开源技术达成基础架构现代化和应用现代化的企业占比分别为 53% 和 42%。

不过,开源软件不仅仅是为了替换旧的基础设施。42% 的受访者表示他们正在将其用于数字化转型,具体主要应用于大数据分析和数据库管理。这一趋势不容小觑。

开源的独特之处在于,它使个人和组织能够以最小的障碍进行协作,实现共同目标。

现如今许多新类别的软件都受到开源技术的影响。人工智能、软件定义的基础架构和云原生平台就是一些很好的例子。

当今软件世界的许多创新都是在开源的情况下发生的,依赖软件来支持其业务的组织都希望能够利用这一创新。

正如红帽 CEO Jim Whitehurst 在调查报告开篇所讲:“这个时代发生的最激动人心的技术创新正在开源社区形成”。

Part1 web服务器

1、Nginx

Nginx (engine x) 是俄罗斯人开发出来的一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,Nginx的并发能力在同类型的网页服务器中表现较好,很多人使用Nginx来做负载均衡器和web反向代理。

  • 支持的操作系统:windows、linux 和 OS X

  • 相关网站:https://nginx.org

2、Lighttpd

Lighttpd是一个轻量级的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销、cpu占用率低、效能好以及丰富的模块等特点。广泛的应用于一些嵌入式的web服务器上。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://www.lighttpd.net/

3、Tomcat

Tomcat服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,主要用于运行JSP 页面和Servlet。因为Tomcat 技术先进、性能稳定,而且免费,因而深受JAVA 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://tomcat.Apache.org

4、Apache HTTP Server

Apache HTTP Server(简称Apache),是Apache软件基金会的一个开放源代码的网页服务器,可以在大多数电脑操作系统中运行,由于其具有的跨平台性和安全性,被广泛使用,是自 1996 年以来互联网上最受欢迎的 Web 服务器系统。据称,目前所有网站中 55.3% 是由 Apache 支持的。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://httpd.apache.org

Part2 大数据与云计算

5、Hadoop

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕Hadoop开发工具、开源软件、商业化工具和技术服务,Hadoop已经成为大数据的标配框架。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:http://hadoop.apache.org

6、Docker

Docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署,广泛的被应用于大数据的领域中。基本上做大数据的公司都会使用到该工具。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://www.docker.com

7、Spark

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark类似于Hadoop MapReduce的通用并行框架。Apache Spark 声称,“它在内存中运行程序的速度比 Hadoop MapReduce 最多快 100 倍,在磁盘上快 10 倍。Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:http://spark.apache.org

8、Storm

Storm是一个Twitter开源的分布式实时大数据处理系统,被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易、股票)等等,大数据实时处理解决方案(流计算)的应用日趋广泛,目前已是分布式技术领域最新爆发点,而Storm更是流计算技术中的佼佼者和主流。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://storm.apache.org

9、Cloud Foundry

Cloud Foundry是业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。它声称“由行业领袖为行业领袖构建”,其支持者包括 IBM、 Pivotal、惠普企业、VMware、英特尔、SAP 和 EMC。

  • 支持的操作系统:与系统无关

  • 相关网站:https://www.cloudfoundry.org

10、CloudStack

CloudStack是一个开源的具有高可用性及扩展性的云计算平台,同时是一个开源云计算解决方案。可以加速高伸缩性的公共和私有云(IaaS)的部署、管理、配置。使用CloudStack作为基础,数据中心操作者可以快速方便的通过现存基础架构创建云服务。

  • 支持的操作系统:与操作系统无关

  • 相关网站:https://cloudstack.apache.org

11、OpenStack

OpenStack是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。由NASA(美国国家航空航天局)和Rackspace合作研发并发起,授权的开源代码项目。OpenStack为私有云和公有云提供可扩展的弹性的云计算服务。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。这种很受欢迎的云计算平台声称,“世界上成百上千个大品牌”每天依赖它。

  • 支持的操作系统:与操作系统无关

  • 相关网站:https://www.openstack.org

Part3 云存储

12、Gluster

GlusterFS是一个可高度扩展、可伸缩的分布式文件系统,适用于云存储和媒体流等数据密集型任务。实现了全部标准POSIX接口,并用fuse实现虚拟化,让用户看起来就像是本地磁盘一样。能够处理千数量级的客户端。

  • 支持的操作系统:Linux、Windows

  • 相关网站:https://www.gluster.org

13、FreeNAS

FreeNAS是一套免费开源的NAS服务器,它能将一部普通PC变成网络存储服务器。该软件基于FreeBSD,Samba 及php,支持CIFS (samba), FTP, NFS protocols, Software RAID (0,1,5) 及 web界面的设定工具。用户可通过Windows、macs、FTP、SSH 及网络文件系统 (NFS) 来访问存储服务器;FreeNAS可被安装于硬盘或移动介质USB Flash Disk上。FreeNAS 服务器前途无量;它是组建简单网络存储服务器的绝佳选择

  • 支持的操作系统:与系统无关

  • 相关网站:http://www.freenas.org

14、Lustre

Lustre是一个开源、分布式并行文件系统软件平台,具有高可扩展、高性能、高可用等特点。Lustre的构造目标是为大规模计算系统提供一个全局一致的POSIX兼容的命名空间,这些计算系统包括了世界上包含最强大的高性能计算系统。它支持数百PB数据存储空间,支持数百GB/s乃至数TB/s并发聚合带宽。一些最早采用它的用户包括美国的几大国家实验室:劳伦斯·利物莫尔国家实验室、桑迪亚国家实验室、橡树岭国家实验室和洛斯阿拉莫斯国家实验室。

  • 支持的操作系统:Linux

  • 相关网站:http://lustre.org

15、Ceph

Ceph是一种为优秀的性能、可靠性和可扩展性而设计的分布式文件系统,是最早致力于开发下一代高性能分布式文件系统的项目。随着云计算的发展,Ceph乘上了OpenStack的春风,进而成为了开源社区受关注较高的项目之一。

  • 支持的操作系统:Linux

  • 相关网站:https://ceph.com

Part4 操作系统

16、centos

CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS完全开源。

17、Ubuntu

Ubuntu也是开源的,也拥有庞大的社区力量,用户可以方便地从社区获得帮助,提供广受欢迎的Linux发行版,有多个版本:桌面版、服务器版、云版、手机版、平板电脑版和物联网版。声称用户包括亚马逊、IBM、维基百科和英伟达。

  • 相关网站:http://www.ubuntu.com/index_kylin

Part5 数据库

18、MySQL

MySQL是用C/C++编写的关系型数据库,自称是“世界上最流行的开源数据库”,备受众多互联网公司的青睐,除了免费社区版外,它还有多款收费版。虽然是免费开源的,但是其性能有足够的保证,国内很多IT公司都在使用MySQL。

  • 支持的操作系统:Windows、Linux、Unix 和 OS X

  • 相关网站:https://www.mysql.com

19、PostgreSQL

PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统。国内知名的华为高斯数据库和腾讯的TBase数据库均是在该数据库的基础上发展而来的。国内最牛的阿里OceanBase数据库所有代码都是自主研发的,虽然不是PostgreSQL基础上开发出来的,但应该也借鉴了PostgreSQL的很多特性和有点。

  • 支持的操作系统:Windows、Linux、Unix 和 OS X

  • 相关网站:https://www.postgresql.org

20、MongoDB

MongoDB 是一种 NoSQL 数据库,是一个基于分布式文件存储的数据库。由C++语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库。用户包括 Foursquare、《福布斯》、Pebble、Adobe、领英、eHarmony 及其他公司。提供收费的专业版和企业版。

  • 支持的操作系统:Windows、Linux、OS X 和 Solaris

  • 相关网站:https://www.mongodb.org

21、Cassandra

这种 NoSQL 数据库由 Facebook开发,其用户包括苹果、欧洲原子核研究组织(CERN)、康卡斯特、电子港湾、GitHub、GoDaddy、Hulu、Instagram、Intuit、网飞、Reddit及其他科技公司。它支持极其庞大的数据集,声称拥有非常高的性能和出色的耐用性和弹性。可通过第三方获得支持。

  • 支持的操作系统:与操作系统无关

  • 相关网站:https://cassandra.apache.org

22、CouchDB

CouchDB是用Erlang开发的面向文档的数据库系统,这种 NoSQL 数据库将数据存储在 JSON 文档中,这类文档可通过 HTTP 来加以查询,并用 JavaScript 来处理。CouchDB现在归 IBM 所有,它提供一款专业人员支持的软件版本,用户包括:三星、Akamai、Expedia、微软游戏工作室及其他公司。

  • 支持的操作系统:Windows、Linux、OS X 和 Android

  • 相关网站:https://couchdb.apache.org 

23、Neo4j

Neo4J一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中,自诩为“世界上领先的图形数据库”,用于欺诈检测、推荐引擎、社交网站、主数据管理及更多领域。用户包括电子港湾、沃尔玛、思科、惠普、埃森哲、CrunchBase、eHarmony、Care.com 及另外许多企业组织。

  • 支持的操作系统:Windows 和 Linux

  • 相关网站:https://neo4j.com

Part6 开发工具和组件

24、Bugzilla

Bugzilla 是开源社区的宠儿,用户包括 Mozilla、Linux 基金会、GNOME、KDE、Apache、Libreoffice、Open Office、Eclipse、红帽、Novell及其他公司。这款软件缺陷追踪系统(bugtracker)的重要功能包括:高级搜索功能、电子邮件通知、预定报告、时间追踪、出色的安全及更多特性。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://www.bugzilla.org

25、Eclipse

Eclipse 项目最为知名的是,它是一种大受欢迎的面向 Java 的集成开发环境(IDE),它还提供面向C/C++和 PHP 的 IDE,此外提供另外一大批开发工具。主要支持者包括冠群科技、谷歌、IBM、甲骨文、红帽和 SAP。

  • 支持的操作系统:与操作系统无关

  • 相关网站:https://www.eclipse.org

26、Ember.js

Ember.js是一个开源的JavaScript客户端框架,用于开发Web应用程序并使用MVC架构模式,这种框架用于“构建野心勃勃的 Web 应用程序”,旨在为 JavaScript 开发人员提高工作效率。官方网站上显示用户包括雅虎、Square、Livingsocial、Groupon、Twitch、TED、网飞、Heroku 和微软。

  • 支持的操作系统:与操作系统无关

  • 相关网站:https://emberjs.com

27、Node.js

Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言,它让开发人员可以使用 JavaScript,编写服务器端应用程序。开发工作之前由 Joyent 管控,现在交由 Node.js 基金会监管。用户包括 IBM、微软、雅虎、SAP、领英、贝宝和网飞。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://nodejs.org/en/

28、React Native

React Native 由 Facebook 开发,这种框架可用于使用 JavaScript 和 React JavaScript 库(同样由 Facebook 开发),构建原生移动应用程序。其他用户包括:《探索》频道和 CBS 体育新闻网。

  • 支持的操作系统:OS X

  • 相关网站:https://facebook.github.io/react-native/

29、Ruby on Rails

Ruby on Rails是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。这个 Web 开发框架在开发人员当中极其流行,它声称“为确保编程员满意和持续高效地工作进行了优化”。用户包括 Basecamp、推特、Shopify 和 GitHub 等公司。

  • 支持的操作系统:Windows、Linux 和 OS X

  • 相关网站:https://rubyonrails.org

Part7 中间件

30、JBoss

JBoss是一个基于J2EE的开放源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范,但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。JBoss中间件包括各种轻量级、对云计算友好的工具,同时结合、集成和自动化各个企业应用程序和系统。用户包括:橡树岭国家实验室、日产、思科、冠群科技、AMD 及其他公司。

  • 支持的操作系统:Linux

  • 相关网站:https://www.jboss.org/

更多开源介绍请关注:GitHub中文社区:

END

前线推出学习交流群和大厂面试真题,获取和加群一定要备注:

研究/工作方向+地点+学校/公司+昵称(如java+上海+上交+可可)根据格式备注,可更快被通过且邀请进群,领取一份专属学习礼包扫码加我微信进群,内推和技术交流,大佬们零距离

END

开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。

ps:后台回复 “面试“&”资料” 数百面试手册,即可领取程序员大礼包等你


阿里巴巴   https://github.com/alibaba

腾讯开源   https://github.com/Tencent

奇虎360   https://github.com/Qihoo360

小米开源  https://github.com/XiaoMi

豆瓣开源  https://github.com/douban

网易开源 https://github.com/netease

在这些公司的开源解决方案内,能够学习到国内最顶级的软件解决方案。


欢迎访问学习去。

————————————————

版权声明:本文为CSDN博主「霍先生的虚拟宇宙网络」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u010919083/article/details/103285909