精华内容
下载资源
问答
  • 后端软件功能包括哪些
    千次阅读
    2018-09-08 10:44:27

    后端有两家比较厉害,无论是算法理论还是软件都有两套,各有自己的侧重点,synopsys和candance,相比较来说前者偏向数字方面做得比较好,比如综合,后者偏向模拟,对于布局布线这方面做得比较好。下面按照后端流程中所使用的软件分别介绍(只介绍自己用的)。

    UNS:这个主要是进行网表的检查,发现网表中的错误,这个工作在前端中也可以通过nlint来进行检查,错误主要包括:多驱动,悬空,三态门使用错误........,

    ccd(Conformal Constraint Designer):这个是candance的sdc检查工具,主要检查sdc的设置不合理,命令使用错误,命令冲突....等错误。

    pt:这个阶段我们可以采用多种的分析方式(MMMC)来进行时序分析,检查setup和holdup,分析时序违约的路径,将结果输出成报告,

    tweaker:这个工具根据时序报告进行时序收敛的修复,可以采用的方法:1.换不同vt的cell2.插buffer3.换不同强度的cell4.split fanout.

    lec:形式验证工具,这个主要是通过数学方法进行验证,主要是测试两个keypoint点之间输入输出逻辑功能是否一致,保证function一致。

    encouter-->innovus(EncounterCadence做布局布线的)(icc是synopsys的工具) :数字版图工具,这个工具可以吃网表,约束,upf,可以进行布局布线,然后产生时序报告,这个时序报告没有pt准确,然后根据报告fix path。

    calibre(mentor公司):https://wenku.baidu.com/view/aeb39b9c14791711cd79172e.html  通过这个工具我们可以进行lvs,drc,等验证其符合设计要求。

     Virtuoso:IC617是Cadence知名的Virtuoso定制芯片设计工具套件,在定制芯片设计中占据统治地位——Virtuoso在全定制芯片(Full Custom)和AMS(Analog Mixed Signal)混合信号芯片/版图(Layout)工具市场上占据接近80%的市场份额!Virtuoso是绝大多数定制芯片设计用户所寻求的工具(EDA of Choice)。Cadence在定制芯片设计市场上的影响如此之大,以至于各个主流芯片代工厂商Foundries基本上都专门为其开发PDK供给芯片设计客户使用。有许多人将IC Virtuoso这工具套件用作纯粹模拟/射频设计用途,这其实只用到了其中的一部分能力。Virtuoso最大的功用还是在混合信号(数字模拟——即Mixed Signal)芯片设计上,但也可以用作全定制数字(Full Custom Digital)芯片设计(是的,Virtuoso可以用来设计全定制数字芯片!——这就是为何Virtuoso包含了Verilog/VHDL以及Digital Implemantion等工具/功能在内。国内芯片设计业似乎大都对此并不是很清楚)!Virtuoso包括了前端到后端的全流程设计功能。与其他工具如多模仿真工具和物理验证工具等结合在一起使用构成了完整的定制芯片设计流程。需要指出的是Cadence每月都对其EDA工具中的某些工具进行升级,包括程序中的错误修正(bug fixings)和功能改进(很多都是用户建议的改进)等。大部分新功能的增加或旧功能的去除都是逐步渐进式(incremental)通过Hotfix版完成的。对Virtuoso来说通常是二至三个月出版一个Hotfix版进行升级。https://www.cnblogs.com/hwBeta/p/6509425.html

       Virtuoso的ADE是模拟设计和SPICE仿真图形界面事实上的业界标准。正因为如此,Cadence采取了不少手段以从中赚取更多利润。例如Cadence从IC6.1版起,将“标称值”SPICE仿真任务(单一特定条件与排错)与“多重”SPICE仿真任务(corners,sweeps,Monte Carlo)分离开来,形成一个三重价格体系模型再加上一个以每日每次使用记价的令牌(token)系统,让用户从ADE-L到ADE-XL再到ADE-GXL一级一级地支付更多的license许可证费用。而这一切nominal/corners/sweeps/monte carlo在旧版IC5.1.41中用户是一同完成的,并且还没有令牌系统在其中跟你玩。这个L-XL-GXL分离自然而然地惹恼了不少用户,给了竞争对手在定制芯片设计EDA上一个翻身的机会。只可惜其主要竞争对手不给力,基本没有拿出过硬的EDA产品来翻盘。例如Synopsys多年前发布的对应竞争工具Custom Designer就是一个不折不扣的失败尝试,虽然Custom Designer做得看上去像一个Virtuoso超级集合,但并没有因此赢得多少用户。现在Synopsys经过几年的收购(包括SpringSoft的Laker全套定制工具家族,Ciranova的Helix placer,和Magma的整套东西)后,将所有这些购进的东西打包整合在一起成为它新的Custom Compiler工具。所以Custom Compiler就是一个Laker加上Helix加上其他一些东西的重新包装,要用这样产品来吸引原本就异常稳固的Virtuoso庞大用户群基本盘恐怕是非常艰难的搏斗。在Mentor Graphics方面,也是通过收购诸如Pyxis,Tanner和Berkeley Design Automation(BDA)来试图渗透进定制芯片设计市场,但这些工具都缺乏类似Virtuoso中的ADE和layout版图等工具相似且完整的功能。Pyxis现在的方向基本上是做MEMS。而Tanner虽然给Mentor Graphics带来了一些客户,但绝大多数是低端设计或者是那些要便宜EDA工具的小公司。BDA的ACE看上去有希望,但还缺少类似Virtuoso的ADE那样的完整性能。总之,在定制芯片设计EDA市场上Cadence的Virtuoso基本盘非常稳固,其竞争对手都比较弱。而且新版ADE将旧版ADE中分离的标称值/corners/sweeps/蒙特卡罗/参数对比等功能都整合在ADE Explorer中,如此对芯片设计用户来说也就更具吸引力了。

    laker:版图设计工具,SpringSoft公司的销售人员和技术支持工程师为大家介绍了该公司的两大系列EDA工具——Verdi和Laker,

    https://wenku.baidu.com/view/bb4616dcb9f3f90f76c61b4a.html

    更多相关内容
  • 四个最佳后端框架推荐 ​ 本文最初发布于 Ace Infoway 博客。 在这个瞬息万变的世界中,网站和 Web 应用程序已经成为公司拥有卓越线上版图的关键。稳固的线上版图,特别是网站和应用程序,可以突破你的...

    四个最佳后端框架推荐

    本文最初发布于 Ace Infoway 博客。

    在这个瞬息万变的世界中,网站和 Web 应用程序已经成为公司拥有卓越线上版图的关键。稳固的线上版图,特别是网站和应用程序,可以突破你的能力上限,带来更多的收入。是的,网站和应用程序的质量会影响到结果,所以为网站和应用程序开发选择适当的后端框架至关重要。

    框架已经成为 Web 开发的重要组成部分,可以帮助你开发出丰富多彩的交互式网站和 Web 应用。对于后端(服务器端)Web 和应用程序开发,有大量的框架可供选择。

    在这篇文章中,我们将讨论几个对 Web 和应用程序开发项目有帮助的后端框架。你马上就会了解到,什么是后端框架,以及 2022 年你最想用的最佳后端框架。

    什么后端框架?

    后端框架是服务器端编程语言的集合,帮助开发网站的后端结构。后端框架为构建动态 Web 应用提供了预先构建好的组件。使用后端框架进行 Web 开发的好处是可以降低门槛,让开发者不必从头开始构建和配置一切。

    根据StackOverflow开发者调查,10.89%的专业开发者喜欢使用 Laravel,其次,37.1%的专业开发者喜欢使用.NET Framework。

    下图展示了技术随时间发展的趋势:

    为什么说后端框架对于 Web 开发而言至关重要?

    后端框架是 Web 开发的精髓。使用框架来构建后端有很多好处,例如:

    • 可以为网站或应用程序开发提供更好的架构;

    • 框架可以帮你更快的编写 SQL,而不需要你手动编写复杂的 SQL 查询;

    • 它们有独特的架构风格(例如 MVC),可以提升代码的可用性和可维护性;

    • 可以提升应用程序和网站开发的效率;

    • 使用框架,编写较少的代码或不编写代码,就可以获得较多的特性。

    选择使用哪个后端框架将决定成功的特质和网站的功能。

    2022 年最好的后端框架有哪些?

    以下是 2022 年 StackOverflow 上关于 Web 应用开发人们提问最多的后端框架,我们将对它们做个全方位的对比:

    1. Laravel

    2. .NET

    3. Zend

    4. Codeigniter

    让我们逐一进行详细地讨论。

    1. Laravel

    Laravel 于 2011 年正式发布,从那时起它就是最受欢迎的 PHP 框架之一。目前大约有 1,14,640 多个活跃的 Laravel 网站。Laravel 是一个简单而优雅的 Web 开发框架,因为它的语法简洁而完备,并搭配了 Model-View-Controller 架构来开发 Web 应用程序。

    举例来说,Laravel 为我们提供了一种既富有表现力又优雅的语法。Laravel 把开发变成了一个有趣的、创造性的、令人愉快的过程。Laravel 是一个非常有用的框架,它使得路由、身份认证、会话、缓存等基本操作都变得更加容易。它不仅易于使用,而且还提供了一套强大的工具,用于构建稳定的大型应用程序。

    Laravel 语法的简洁性无懈可击,我们可以用它创建高性能的 Web 应用程序。这表明,Laravel 在 2022 年以及未来几年内都是很有前途的。

    有不少有名的公司使用 Laravel,以下是其中的一部分:

    • MasterCard

    • Razorpay

    • Kmong

    • Bitpanda

    根据 Github 的数据,Laravel 有 68k 颗星,而且越来约受欢迎,从小到大,有各种规模的公司把它纳入自己的技术栈。

    Laravel 的优点

    • 完美的身份验证和授权:Laravel 的主要优势之一是即插即用的认证方法,这使得用户可以通过一个快速、直观、优雅、简单的接口安全地访问你的资源。

    • 快速缓存集成:Laravel 的快速缓存集成可以给网站带来惊人的用户体验。Laravel 支持像 Memcached 和 Redis 这样的后端缓存需求,而且开箱即用。

    • 安全可靠的交易:企业在开发一个网站时,安全是首先要考虑的问题。在这方面,Laravel 是最好的,因为它的内置系统可以防止 SQL 注入、保护核心网站脚本等。它的代码库使用频繁,因此保护得很好。

    • 开源及强大的社区:Laravel 是开源的,有一个强大的社区,不断为开发者和企业提供支持。由于有强大的支持,所以你的开发工作不会受阻。

    • MVC 架构:由于 MVC 架构内置了不少功能,所以 Laravel 是 Web 应用开发的一流框架。

    Laravel 的特性

    • Artisan 控制台:这是 Laravel 最好的特性之一。Artisan 是 Laravel 框架内置的命令行工具,它帮助开发人员将大部分繁琐的重复性编程过程自动化。

    • 库和模块:在面向对象的框架里,Laravel 是目前最好的软件包之一。它有许多预装库,而且完全支持模块化。

    • Eloquent ORM:Eloquent Object Relational Mapping(ORM)是 Laravel 的一个特性,包含一个简单的 PHP Active Record 实现。Web 应用开发人员可以使用 PHP 语法来编写数据库查询,而不必编写 SQL 代码。而且,Laravel 的 ORM 比其他 PHP 框架的速度快很多。

    • 单元测试:Laravel 框架可以执行大量的测试,以确保程序员新做的变更不会意外地破坏 Web 应用中的任何东西。

    • 模板引擎:Laravel 框架以其轻量级模板而闻名,它可以用来创建美观的布局,然后动态地插入内容。

    下图是根据 Builtwith 得出的 Laravel 使用情况统计:

    2. .NET

    2002 年,微软推出了一个软件框架.NET(dot net 的缩写)。它包括多种编码语言、库和编辑器。.NET 框架允许你创建广泛的应用,如 Web 应用、移动应用、游戏、云、物联网(IoT)等。

    .NET 软件开发框架和生态系统使得开发人员可以快速开发桌面和 Web 应用。它是一个流行的免费平台,现在被广泛用于各种应用,因为它提供的编程环境可以支持大多数软件开发阶段。希望获得广泛功能(如基于 Web 的服务、桌面软件和云基础设施支持)的企业应该使用.NET。

    当前,在网站开发中,大多数著名公司都在使用.NET 框架来开发 Web 应用程序。

    有不少有名的公司在使用.NET,以下是其中的一部分:

    • Accenture

    • Stack Overflow

    • Starbucks

    • GoDaddy

    • Microsoft

    根据 Github 的数据,.NET 有 16.8k 颗星,而且越来约受欢迎,从小到大,有各种规模的公司把它纳入自己的技术栈。

    .NET 的优点

    • 降低编码量:面向对象编程消除了多余的代码,降低了开发人员的编码量。.NET 中有很多可重复使用的代码,以及很多可重复使用的元素。这可以节省开发应用程序的时间,降低开发成本。

    • 面向对象:在.NET 框架中,你看到的所有东西都是对象。你将因此拥有一个强大的工具,而且可以控制自己的应用程序。这也使得响应重复事件变得更加容易。

    • 缓存:.NET 中包含的缓存系统非常可靠,使用起来也很简单。

    • 易于维护:使用.NET,创建和维护页面都很容易,因为源代码和 HTML 在一起。

    • 节省时间:.NET 节省了大量的时间,因为它消除了大部分的编码要求。这意味着企业可以节省时间,进而缩短应用程序的上市时间。

    • 庞大的社区:.NET 有一个庞大的社区。因为有来自社区的高水平支持,所以许多公司和开发人员都在使用.NET 框架。有了这个庞大的社区,几乎任何问题都可能在其他成员的帮助下得到解决。

    .NET 的特性

    • 公共语言运行时:这是所有.NET 语言(包括 C#、VB.NET、托管 C++、J#等)共享的引擎。

    • 工具支持:为了简化开发者的工作,CLR 与 Visual Studio、编译器、调试器和分析器等工具结合在一起使用。

    • 易于使用的调试支持:.NET IDE(集成开发环境)提供全面的调试功能。当发生运行时异常时,程序会终止,IDE 会突出显示包含错误的行,以及错误的具体内容和可选的解决方案。

    • 多语言支持:.NET 通过管理将源代码转换为中间语言(IL)和将 IL 转换为本地代码的编译器来支持多语言开发,并确保程序的安全和防护。

    • 安全:CLR 通过识别用户和代码,以及执行权限检查来确保系统安全。CLR 可以确定代码的标识,并授予相应的资源访问权限。安全等级是.NET 框架的一个关键特性。

    3. Zend

    Zend 是一个 PHP 框架,于 2006 年由 Andi Gutmans 和 Zeev Suraski 首次发布。Zend 是一个开源的、面向对象的框架,到目前为止,大约有 5.7 亿的安装量。由于是一个完全面向对象的框架,所以它具有诸如继承性、可重用性和灵活性等特点。

    它是基于 MVC 架构的,遵循 BSD 许可。Zend 中的前端控制器设计模式也允许请求基于单个控制器类。Zend 依赖于一些包。它提供了一个包依赖管理器,简化了依赖项组织和归类。

    另外,Zend 的能力并不局限于为中小型企业构建网站,这个强大的 PHP 框架也可以用于构建企业级 Web 应用。得益于 Zend 框架的模块化架构、事件管理器、服务管理器和 PHP 合成器,它可以为你提供强大的应用程序,推动企业的业务增长。

    有不少有名的公司在使用 Zend,以下是其中的一部分:

    • Directus

    • Zingat

    • Catho

    • Hostinger Stack

    • Webedia

    根据 Github 的数据,Zend 有 5.6k 颗星,而且越来约受欢迎,从小到大,有各种规模的公司把它纳入自己的技术栈。

    Zend 的优点

    • 面向对象:Zend 是面向对象的,允许企业继承和增强预定义类的功能。

    • 高度可定制:通过 Zend 框架,你可以按自己喜欢的方式定制网站,这要得益于该框架所包含的各种定制工具。最好的方面是,你可以在更短的时间内定制一个 Zend 应用程序,而且不会有任何问题。

    • 庞大的社区:Zend 有庞大的社区支持,并在企业界得到了极大的认可,有几个受人尊敬的网站就是用 Zend 开发的。

    • 标准和指南:每位贡献者都要签署一份贡献许可协议(CLA),而且所有的工作都必须遵循同一套编码标准。这可以确保每一行代码都是高质量的,都经过了全面的测试,并且易于阅读。

    • 演示程序:Zend 的主要优点之一是它提供了多个演示程序,教你各种组件的用法。

    • 灵活的架构:大多数开发人员都希望使用灵活的平台,而 Zend 框架是目前最灵活的架构平台。这有助于用户定位和纠正在测试阶段发生的所有错误。

    Zend 的特性

    • 便捷集成:Zend 框架集成了大量的库。它可以帮助开发人员跨不同的组件测试数据。

    • 结构化代码:如果要在代码中新增一个功能,你应该在上线之前进行测试。这样更容易避免错误,并鼓励使用面向对象编程。

    • 模型-视图-控制器:Zend 框架提供了 MVC 开发模式。你可以将 Web 项目划分为表现层、数据访问层、业务逻辑层等。当多个开发者和设计者在同一个在线应用项目上工作时,MVC 模型就变得非常有用。

    • 数据库集成:Zend 提供了强大的数据库集成能力,包括 DB2、MySQL、SQLite、Oracle、MongoDB 等。

    • 跨平台:Zend 支持跨平台操作系统。

    下图是根据 Builtwith 得出的 Zend 框架调试器使用情况统计:

    编辑切换为居中

    添加图片注释,不超过 140 字(可选)

    4. Codeigniter

    Codeigniter 是 EllisLab 于 2006 年 2 月 28 日发布的 PHP 框架。它是为那些希望有一个简单而有吸引力的工具集来构建全功能 Web 应用的 Web 开发者而创建的。CodeIgniter 是用 PHP 构建动态网站的最流行的框架之一。

    Codeigniter 为企业提供了非常条理的文档。它提供了卓越的支持和稳定性。它允许使用一种简单的路由方法。它还可以把你导向缓存的网站,从而提高性能,缩短加载时间。

    该框架为用户提供了完全的自由,他们可以不使用 MVC 开发范式。CodeIgniter 最好的地方在于,它允许第三方插件帮助实现复杂的功能。

    有不少有名的公司在使用 Codeigniter,以下是其中的一部分:

    • Ola

    • Accenture

    • Buffer

    • SocialDog

    • Saramin

    根据 Github 的数据,Codeigniter 有 18.2k 颗星,而且越来约受欢迎,从小到大,有各种规模的公司把它纳入自己的技术栈。

    Codeigniter 的优点

    • 错误处理:Codeigniter 提供了一个简单的用户接口,可以检测任何可能阻碍网站流畅操作进而影响用户体验的错误或缺陷。

    • 迁移无忧:Codeigniter 提供了充分的迁移支持。当涉及到数据库更新和迁移时,CodeIgniter 允许开发人员从一个服务器迁移到另一个。

    • 良好的社区支持:当涉及到高级服务开发时,有许多具有丰富经验的专业人员可以提供一流的支持。

    • 快速开发:Codeigniter 框架最适合于快速开发,因为只需要较少的代码就可以开发出一个网站。

    • 简单易用:由于接口简单,所以 Codeigniter 框架简单易用。使用 Codeigniter,用不同方式修改数据库也很容易。

    Codeigniter 的特性

    • 轻量级:Codeigniter 的基本系统需要的库相对比较小。其他库可以根据需要动态添加。正因为如此,该框架非常快速、轻便。

    • 搜索引擎友好的 URL:Codeigniter 生成的多个 URL 简洁规整,对搜索引擎友好。它没有使用一般的基于查询的方法,而是使用了分段的方法。

    • 模型-视图-控制器:MVC 提供了一种测试驱动的开发,这意味着开发人员可以根据需求准确地构建和测试模块。

    • 内置库:该框架提供了内置库,可以帮助开发人员完成所有任务,如电子邮件发送、处理图像、HTML/文本电子邮件等。

    • 数据传输简单:使用 Codeigniter 框架,数据传输很容易,而且不会损失任何有价值的数据。

    下图是根据 Builtwith 得出的 Codeigniter 使用情况统计:

    总结

    现在,你已经了解了我们上面列出的最佳后端框架。选择最适合你项目的框架。这样,在未来几年里,你一定可以从上述最佳后端框架中受益,使你的开发工作更轻松。

    展开全文
  • 史上最全的后端技术大全,你都了解哪些技术呢?

    万次阅读 多人点赞 2019-09-03 08:38:00
    通常情况下coredump文件包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。 3. 缓存穿透/击穿/雪崩 缓存穿透: 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到...

    640?wx_fmt=jpeg

    | 导语 工欲善其事,必先利其器;士欲宣其义,必先读其书。后台开发作为互联网技术领域的掌上明珠,一直都是开发者们的追逐的高峰。本文将从后台开发所涉及到的技术术语出发,基于系统开发、架构设计、网络通信等几个方面让大家对后台开发有一个清晰的了解,讲解全面易懂。

    系统开发

    1. 高内聚/低耦合

    高内聚指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。模块的内聚反映模块内部联系的紧密程度。

    模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。一个完整的系统,模块与模块之间,尽可能的使其独立存在。通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。


    2. 过度设计

    过度设计就是进行了过多的面向未来的设计或者说把相对简单的事情想复杂了,过度追求模块化、可扩展性、设计模式等,为系统增加了不必要的复杂度。


    3. 过早优化

    过早指的不是在开发过程的早期,而是在还没弄清楚需求未来的变化的走向的时候。你的优化不仅可能导致你无法很好地实现新的需求,而且你对优化的预期的猜测有可能还是错的,导致实际上你除了把代码变复杂以外什么都没得到。

    正确的方法是,先有质量地实现你的需求,写够testcase,然后做profile去找到性能的瓶颈,这个时候才做优化。


    4. 重构 (Refactoring)

    重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。


    5. 破窗效应

    又称破窗理论,破窗效应(Broken windows theory)是犯罪学的一个理论。此理论认为环境中的不良现象如果被放任存在,会诱使人们仿效,甚至变本加厉。一幢有少许破窗的建筑为例,如果那些窗不被修理好,可能将会有破坏者破坏更多的窗户。最终他们甚至会闯入建筑内,如果发现无人居住,也许就在那里定居或者纵火。

    应用在软件工程上就是,一定不能让系统代码或者架构设计的隐患有冒头的机会,否则随着时间的推移,隐患会越来越重。反之,一个本身优质的系统,会让人不由自主的写出优质的代码。


    6. 互不信任原则

    指在程序运行上下游的整个链路中,每个点都是不能保证绝对可靠的,任何一个点都可能随时发生故障或者不可预知的行为,包括机器网络、服务本身、依赖环境、输入和请求等,因此要处处设防。


    7. 持久化 (Persistence)

    持久化是将程序数据在临时状态和持久状态间转换的机制。通俗的讲,就是临时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库或者本地磁盘中,能够长久保存)。


    8. 临界区

    临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。


    9. 阻塞/非阻塞

    阻塞和非阻塞通常形容多线程间的相互影响。比如一个线程占用了临界区资源,那么其它所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。而非阻塞允许多个线程同时进入临界区。


    10. 同步/异步

    通常同步和异步是指函数/方法调用方面。

    同步就是在发出一个函数调用时,在没有得到结果之前,该调用就不返回。异步调用会瞬间返回,但是异步调用瞬间返回并不代表你的任务就完成了,他会在后台起个线程继续进行任务,等任务执行完毕后通过回调callback或其他方式通知调用方。


    11. 并发/并行

    • 并行(parallel)指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。

    • 并发(concurrency)指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。

    架构设计


    1. 高并发 (High Concurrency)

    由于分布式系统的问世,高并发(High Concurrency)通常是指通过设计保证系统能够同时并行处理很多请求。通俗来讲,高并发是指在同一个时间点,有很多用户同时的访问同一 API 接口或者 Url 地址。它经常会发生在有大活跃用户量,用户高聚集的业务场景中。


    2. 高可用 (High Availability)

    高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,一个系统经过专门的设计,以减少停工时间,而保持其服务的高度可用性。


    3. 读写分离

    为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作。


    4. 冷备/热备

    • 冷备:两个服务器,一台运行,一台不运行做为备份。这样一旦运行的服务器宕机,就把备份的服务器运行起来。冷备的方案比较容易实现,但冷备的缺点是主机出现故障时备机不会自动接管,需要主动切换服务。

    • 热备:即是通常所说的active/standby方式,服务器数据包括数据库数据同时往两台或多台服务器写。当active服务器出现故障的时候,通过软件诊测(一般是通过心跳诊断)将standby机器激活,保证应用在短时间内完全恢复正常使用。当一台服务器宕机后,自动切换到另一台备用机使用。


    5. 异地多活

    异地多活一般是指在不同城市建立独立的数据中心,“活”是相对于冷备份而言的,冷备份是备份全量数据,平时不支撑业务需求,只有在主机房出现故障的时候才会切换到备用机房,而多活,是指这些机房在日常的业务中也需要走流量,做业务支撑。


    6. 负载均衡 (Load Balance)

    负载均衡,是对多台服务器进行流量分发的负载均衡服务。可在多个实例间自动分配应用程序的对外服务能力,通过消除单点故障提升应用系统的可用性,让您实现更高水平的应用程序容错能力,从而无缝提供分配应用程序流量所需的负载均衡容量,为您提供高效、稳定、安全的服务。


    7. 动静分离

    动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。


    8. 集群

    单台服务器的并发承载能力总是有限的,当单台服务器处理能力达到性能瓶颈的时,将多台服务器组合起来提供服务,这种组合方式称之为集群,集群中每台服务器就叫做这个集群的一个“节点”,每个节点都能提供相同的服务,从而成倍的提升整个系统的并发处理能力。


    9. 分布式

    分布式系统就是将一个完整的系统按照业务功能拆分成很多独立的子系统,每个子系统就被称为“服务”,分布式系统将请求分拣和分发到不同的子系统,让不同的服务来处理不同的请求。在分布式系统中,子系统独立运行,它们之间通过网络通信连接起来实现数据互通和组合服务。


    10. CAP理论

    CAP理论,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),不能同时成立。

    • 一致性:它要求在同一时刻点,分布式系统中的所有数据备份都相同或者都处于同一状态。

    • 可用性:在系统集群的一部分节点宕机后,系统依然能够正确的响应用户的请求。

    • 分区容错性:系统能够容忍节点之间的网络通信的故障。

    简单的来说,在一个分布式系统中,最多能支持上面的两种属性。但显然既然是分布式注定我们是必然要进行分区,既然分区,我们就无法百分百避免分区的错误。因此,我们只能在一致性和可用性去作出选择。

    在分布式系统中,我们往往追求的是可用性,它的重要性比一致性要高,那么如何实现高可用,这里又有一个理论,就是 BASE 理论,它给 CAP 理论做了进一步的扩充。


    11. BASE理论

    BASE 理论指出:

    • Basically Available(基本可用)

    • Soft state(软状态)

    • Eventually consistent(最终一致性)

    BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。


    12. 水平扩展/垂直扩展

    • 水平扩展 Scale Out通过增加更多的服务器或者程序实例来分散负载,从而提升存储能力和计算能力。

    • 垂直扩展 Scale Up 提升单机处理能力。

    垂直扩展的方式又有两种:

    (1)增强单机硬件性能,例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G;

    (2)提升单机软件或者架构性能,例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;

       

    13. 平行扩容

    与水平扩展类似。集群服务器中的节点均为平行对等节点,当需要扩容时,可以通过添加更多节点以提高集群的服务能力。一般来说服务器中关键路径(如服务器中的登录、支付、核心业务逻辑等)都需要支持运行时动态平行扩容。


    14. 弹性扩容

    指对部署的集群进行动态在线扩容。弹性扩容系统可以根据实际业务环境按照一定策略自动地添加更多的节点(包括存储节点、计算节点、网络节点)来增加系统容量、提高系统性能或者增强系统可靠性,或者同时完成这三个目标。


    15. 状态同步/帧同步

    • 状态同步:状态同步是指服务器负责计算全部的游戏逻辑,并且广播这些计算的结果,客户端仅仅负责发送玩家的操作,以及表现收到的游戏结果。

    特征:状态同步安全性高,逻辑更新方便,断线重连快,但是开发效率较低,网络流量随游戏复杂度增加,服务器需要承载更大压力。

    • 帧同步:服务端只转发消息,不做任何逻辑处理,各客户端每秒帧数一致,在每一帧都处理同样的输入数据。

    特征:帧同步需要保证系统在相同的输入下,要有相同的输出。帧同步开发效率高,流量消耗低而且稳定,对服务器的压力非常小。但是网络要求高,断线重连时间长,客户端计算压力大。

    网络通信


    1. 连接池

    预先建立一个连接缓冲池,并提供一套连接使用、分配、管理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了连接频繁建立、关闭的开销。


    2. 断线重连

    由于网络波动造成用户间歇性的断开与服务器的连接,待网络恢复之后服务器尝试将用户连接到上次断开时的状态和数据。


    3. 会话保持

    会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互过程的关连性,在作负载均衡的同时还保证一系列相关连的访问请求都会分配到一台机器上。用人话来表述就是:在一次会话过程中发起的多个请求都会落到同一台机器上。


    4. 长连接/短连接

    通常是指TCP的长连接和短连接。长连接就是建立TCP连接后,一直保持这个连接,一般会中间彼此发送心跳来确认对应的存在,中间会做多次业务数据传输,一般不会主动断开连接。短连接一般指建立连接后,执行一次事务后(如:http请求),然后就关掉这个连接。


    5. 流量控制/拥塞控制

    • 流量控制防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理。

    • 拥塞控制防止发送方发的太快,使得网络来不及处理产生拥塞,进而引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿。


    6. 惊群效应

    惊群效应也有人叫做雷鸣群体效应,不过叫什么,简言之,惊群现象就是多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只可能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群。


    7. NAT

    NAT(Network Address Translation,网络地址转换),就是替换IP报文头部的地址信息。NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力。

    故障异常


    1. 宕机

    宕机,一般情况下指的就是计算机主机出现意外故障而死机。其次,一些服务器例如数据库死锁也可以称为宕机,一些服务器的某些服务挂掉了,就可以这么说。


    2. coredump

    当程序出错而异常中断时,OS会把程序工作的当前状态存储成一个coredunmp文件。通常情况下coredump文件包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。


    3. 缓存穿透/击穿/雪崩

    • 缓存穿透:缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。

    • 缓存击穿:缓存击穿是指热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到db。

    • 缓存雪崩:缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。

    • 与缓存击穿不同的是:存击穿是热点key失效,缓存雪崩是大量的key同时失效。


    4. 500/501/502/503/504/505

    • 500 Internal Server Error:内部服务错误,一般是服务器遇到意外情况,而无法完成请求。可能原因: 1、程序错误,例如:ASP或者PHP语法错误;2、高并发导致,系统资源限制不能打开过多的文件所致。

    • 501Not implemented:服务器不理解或不支持请求的HTTP请求。

    • 502Bad Gateway:WEB服务器故障,可能是由于程序进程不够,请求的php-fpm已经执行,但是由于某种原因而没有执行完毕,最终导致php-fpm进程终止。可能原因:1、Nginx服务器,php-cgi进程数不够用;2、PHP执行时间过长;3、php-cgi进程死掉;

    • 503Service Unavailable:服务器目前无法使用。系统维护服务器暂时的无法处理客户端的请求,这只是暂时状态。可以联系下服务器提供商。

    • 504Gateway Timeout:服务器504错误表示超时,是指客户端所发出的请求没有到达网关,请求没有到可以执行的php-fpm,一般是与nginx.conf的配置有关。

    • 505HTTP Version Not Supported:服务器不支持请求中所用的 HTTP 协议版本。(HTTP 版本不受支持)

    除了500错误可能是程序语言错误,其余的报错,都大概可以理解为服务器或者服务器配置出现问题。


    5. 内存溢出/内存泄漏

    • 内存溢出:内存溢出(Out Of Memory)指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。

    • 内存泄漏:内存泄漏(Memory Leak)指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。


    6. 句柄泄漏

    句柄泄漏是进程在调用系统文件之后,没有释放已经打开的文件句柄。一般句柄泄漏后的现象是,机器变慢,CPU飙升,出现句柄泄漏的cgi或server的CPU使用率增加。


    7. 死锁

    死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都抑制处于阻塞状态并无法进行下去,此时称系统处于死锁状态或系统产生了死锁。


    8. 软中断/硬中断

    • 硬中断:我们通常所说的中断指的是硬中断(hardirq)。

      主要是用来通知操作系统系统外设状态的变化。

    • 软中断:1、通常是硬中断服务程序对内核的中断;2、为了满足实时系统的要求,中断处理应该是越快越好。

    linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。


    9. 毛刺

    在短暂的某一刻,服务器性能指标(如流量、磁盘IO、CPU使用率等)远大于该时刻前后时间段。毛刺的出现代表这服务器资源利用不均匀,不充分,容易诱发其他更严重的问题。


    10. 重放攻击

    攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。它是一种攻击类型,这种攻击会不断恶意或欺诈性地重复一个有效的数据传输,重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。


    11. 网络孤岛

    网络孤岛指集群环境中,部分机器与整个集群失去网络连接,分裂为一个小集群并且发生数据不一致的状况。


    12. 数据倾斜

    对于集群系统,一般缓存是分布式的,即不同节点负责一定范围的缓存数据。我们把缓存数据分散度不够,导致大量的缓存数据集中到了一台或者几台服务节点上,称为数据倾斜。一般来说数据倾斜是由于负载均衡实施的效果不好引起的。


    13. 脑裂

    脑裂是指在集群系统中,部分节点之间网络不可达而引起的系统分裂,不同分裂的小集群会按照各自的状态提供服务,原本的集群会同时存在不一致的反应,造成节点之间互相争抢资源,系统混乱,数据损坏。

    监控告警


    1. 服务监控

    服务监控主要目的在服务出现问题或者快要出现问题时能够准确快速地发现以减小影响范围。服务监控一般有多种手段,按层次可划分为:

    • 系统层(CPU、网络状态、IO、机器负载等)

    • 应用层(进程状态、错误日志、吞吐量等)

    • 业务层(服务/接口的错误码、响应时间)

    • 用户层(用户行为、舆情监控、前端埋点)


    2. 全链路监控

    • 服务拨测:服务拨测是探测服务(应用)可用性的监控方式,通过拨测节点对目标服务进行周期性探测,主要通过可用性和响应时间来度量,拨测节点通常有异地多个。

    • 节点探测:节点探测是用来发现和追踪不同的机房(数据中心)节点之间网络可用性和通畅性的监控方式,主要通过响应时间、丢包率、跳数来度量,探测方法一般是ping、mtr或其他私有协议。

    • 告警过滤:对某些可预知的告警进行过滤,不进入告警统计的数据,如少量爬虫访问导致的http响应500错误,业务系统自定义异常信息等。

    • 告警去重:当一个告警通知负责人后,在这个告警恢复之前,不会继续收到相同的告警。

    • 告警抑制:为了减少由于系统抖动带来的干扰,还需要实现抑制,例如服务器瞬间高负载,可能是正常的,只有持续一段时间的高负载才需要得到重视。

    • 告警恢复:开发/运维人员不仅需要收到告警通知,还需要收到故障消除告警恢复正常的通知。

    • 告警合并:对同一时刻产生的多条相同告警进行合并,如某个微服务集群同一时刻出现多个子服务负载过高的告警,需要合并成为一条告警。

    • 告警收敛:有时某个告警产生时,往往会伴随着其它告警。这时可以只对根本原因产生告警,其它告警收敛为子告警一并发送通知。如云服务器出现CPU负载告警时往往伴随其搭载的所有系统的可用性告警。

    • 故障自愈:实时发现告警,预诊断分析,自动恢复故障,并打通周边系统实现整个流程的闭环。

    服务治理


    1. 微服务

    微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通(通常是基于HTTP的Restful API).每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。


    2. 服务发现

    服务发现是指使用一个注册中心来记录分布式系统中的全部服务的信息,以便其他服务能够快速的找到这些已注册的服务。服务发现是支撑大规模 SOA 和微服务架构的核心模块,它应该尽量做到高可用。


    3. 流量削峰

    如果观看抽奖或秒杀系统的请求监控曲线,你就会发现这类系统在活动开放的时间段内会出现一个波峰,而在活动未开放时,系统的请求量、机器负载一般都是比较平稳的。为了节省机器资源,我们不可能时时都提供最大化的资源能力来支持短时间的高峰请求。所以需要使用一些技术手段,来削弱瞬时的请求高峰,让系统吞吐量在高峰请求下保持可控。削峰也可用于消除毛刺,使服务器资源利用更加均衡和充分。常见的削峰策略有队列,限频,分层过滤,多级缓存等。


    4. 版本兼容

    在升级版本的过程中,需要考虑升级版本后,新的数据结构是否能够理解和解析旧数据,新修改的协议是否能够理解旧的协议以及做出预期内合适的处理。这就需要在服务设计过程中做好版本兼容。


    5. 过载保护

    过载是指当前负载已经超过了系统的最大处理能力,过载的出现,会导致部分服务不可用,如果处置不当,极有可能引起服务完全不可用,乃至雪崩。过载保护正是针对这种异常情况做的措施,防止出现服务完全不可用的现象。


    6. 服务熔断

    服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。


    7. 服务降级

    服务降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。降级往往会指定不同的级别,面临不同的异常等级执行不同的处理。

    • 根据服务方式:可以拒接服务,可以延迟服务,也有时候可以随机服务。

    • 根据服务范围:可以砍掉某个功能,也可以砍掉某些模块。

    总之服务降级需要根据不同的业务需求采用不同的降级策略。主要的目的就是服务虽然有损但是总比没有好。

    8. 熔断VS降级

    • 相同点:目标一致,都是从可用性和可靠性出发,为了防止系统崩溃;用户体验类似,最终都让用户体验到的是某些功能暂时不可用;

    • 不同点:触发原因不同,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;


    9. 服务限流

    限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到的需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延迟处理,拒绝处理,或者部分拒绝处理等等。


    10. 故障屏蔽

    将故障机器从集群剔除,以保证新的请求不会分发到故障机器。

    测试方法


    1. 黑盒/白盒测试

    黑盒测试不考虑程序内部结构和逻辑结构,主要是用来测试系统的功能是否满足需求规格说明书。一般会有一个输入值,一个输入值,和期望值做比较。

    白盒测试主要应用在单元测试阶段,主要是对代码级的测试,针对程序内部逻辑结构,测试手段有:语句覆盖、判定覆盖、条件覆盖、路径覆盖、条件组合覆盖


    2. 单元/集成/系统/验收测试

    软件测试一般分为4个阶段:单元测试、集成测试、系统测试、验收测试。

    • 单元测试:单元测试是对软件中的最小可验证单元进行检查和验证,如一个模块、一个过程、一个方法等。单元测试粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。

    • 集成测试:集成测试也叫做组装测试,通常在单元测试的基础上,将所有的程序模块进行有序的、递增的测试。集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既验证“设计”,又验证“需求”。

    • 系统测试:系统测试时将经过集成测试的软件,作为计算机系统的一部分,与系统中其他部分结合起来,在实际运行环境下进行一系列严格有效的测试,以发现软件潜在的问题,保证系统的正常运行。系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”。

    • 验收测试:验收测试也称交付测试,是针对用户需求、业务流程进行的正式的测试,以确定系统是否满足验收标准,由用户、客户或其他授权机构决定是否接受系统。验收测试与系统测试相似,主要区别是测试人员不同,验收测试由用户执行。


    3. 回归测试

    当发现并修改缺陷后,或在软件中添加新的功能后,重新测试。用来检查被发现的缺陷是否被改正,并且所做的修改没有引发新的问题。


    4. 冒烟测试

    这一术语源自硬件行业。对一个硬件或硬件组件进行更改或修复后,直接给设备加电。如果没有冒烟,则该组件就通过了测试。在软件中,“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程。

    冒烟测试是在软件开发过程中的一种针对软件版本包的快速基本功能验证策略,是对软件基本功能进行确认验证的手段,并非对软件版本包的深入测试。

    比如:对于一个登录系统的冒烟测试,我们只需测试输入正确的用户名、密码,验证登录这一个核心功能点,至于输入框、特殊字符等,可以在冒烟测试之后进行。


    5. 性能测试

    性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试压力测试都属于性能测试,两者可以结合进行。

    • 通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。

    • 压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。


    6. 基准测试

    基准测试(Benchmark)也是一种性能测试方式,用来测量机器的硬件最高实际运行性能,以及软件优化的性能提升效果, 同时也可以用来识别某段代码的CPU或者内存效率问题. 许多开发人员会用基准测试来测试不同的并发模式, 或者用基准测试来辅助配置工作池的数量, 以保证能最大化系统的吞吐量.


    7. A/B测试

    A/B测试,是用两组及以上随机分配的、数量相似的样本进行对比,如果实验组和对比组的实验结果相比,在目标指标上具有统计显著性,那就可以说明实验组的功能可以导致你想要的结果,从而帮你验证假设或者做出产品决定。


    8. 代码覆盖测试

    代码覆盖(Code coverage)是软件测试中的一种度量,描述程式中源代码被测试的比例和程度,所得比例称为代码覆盖率。在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。

    发布部署


    1. DEV/PRO/FAT/UAT

    • DEV(Development environment):开发环境,用于开发人员调试使用,版本变化较大。

    • FAT(Feature Acceptance Test environment):功能验收测试环境,用于软件测试人员测试使用。

    • UAT(User Acceptance Test environment):用户验收测试环境,用于生产环境下的功能验证,可作为预发布环境。

    • PRO(Production environment):生产环境,正式线上环境。


    2. 灰度发布

    灰度发布是指在升级版本过程中,通过分区控制,白名单控制等方式对一部分用户先升级产品特性,而其余用户则保持不变,当一段时间后升级产品特性的用户没有反馈问题,就逐步扩大范围,最终向所有用户开放新版本特性,灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、修改问题,以保证其影响度。


    3. 回滚 (Rollback)

    指的是程序或数据处理错误时,将程序或数据恢复到上一次正确状态(或者是上一个稳定版本)的行为。

    来源:云加社区

    原文:http://t.cn/AiQWteI2

    题图:来自谷歌图片搜索

    版权:本文版权归原作者所有

    投稿:欢迎投稿,邮箱: editor@hi-linux.com

    640?wx_fmt=gif

    640?wx_fmt=png

    你可能还喜欢

    点击下方图片即可阅读

    640?wx_fmt=png

    使用 KubeSphere 轻松实现微服务灰度发布与熔断

    640?wx_fmt=png

    展开全文
  • 后端来讲,目前市场上的电子商务软件基本上可以分为两个阵营,即php阵营和Java阵营。两个阵营的开发基本上都是各自围绕着各自的开发语言(php/Java),选取最为兼容合适的框架结构和数据库,然后进行服务器端的...

    一、背景

    从后端来讲,目前市场上的电子商务软件基本上可以分为两个阵营,即php阵营和Java阵营。两个阵营的开发基本上都是各自围绕着各自的开发语言(php/Java),选取最为兼容合适的框架结构和数据库,然后进行服务器端的开发。

    Java语言

    Java是一门计算机编程语言,和C++、Python等编程语言一样,Java如今依旧应用广泛。从我们日常用的安卓手机APP到大部分网站或管理信息系统的应用服务器程序都是用Java这中语言来写的。

    PHP语言

    PHP是Hypertext Preprocessor的缩写,是一种计算机脚本语言(Script languages)。脚本语言不需要像编程语言那样在编译时生成二进制可执行文件,而是直接对写好的PHP代码执行以达到效果。

    PHP和Java的区别

    一、技术区别

    java是纯面向对象开发,功能强大,分支众多,没有java不能做的软件。C/S也好B/S也好。从功能上讲,没有语言可以和java相比。但其优势也是其劣势。

    PHP吸收了java和c以及perl等语言优点,专注互联网领域。在WEB领域中PHP拥有得天独厚的优势,WEB领域没有语言可以和PHP相比。

    二、数据库访问区别

    Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。

    三、安全性区别

    在同是开源和跨平台的java面前,php丢掉了很多的优势,在代码的安全性上尤为突出。

    php的开发程序在别人拿到代码后,可以很容易的进行修改。而java开发的程序由于无法看到完整的源代码,只能看到一些编译好的类文件,所以安全性较高。

    四、开发成本比较

    PHP在互联网应用诸多方面都强于Java,那么Java开发出的电子商务产品何以与PHP产品竞争呢?这在于Java阵营普遍走的是政府路线, 而PHP阵营走的是全民路线。Java在互联网方面靠的是大学老师的言传身教,才得以在互联网世界狺狺狂啸,而PHP是靠得是自身品质而得民心,所以才一路赞歌。

    软件价格的高低很大程度上和自身成本和功能相挂钩。PHP的入门门槛较低,但是任何方面成为高手,都是万里挑一。绝大多数学过c的程序员都很容易转型为PHP程序员,这使得PHP程序员如同国球一样普及,同样更是高手如云,高质量的PHP软件产品也层出不穷。

    服务器成本方面,PHP最经典的组合PHP+ MySQL + Apache,Java也是经常与MySQL + Tomcat、JBoss等软件配合。所有软件都是开源免费的,所以服务器端的投入都并不高

    而Java程序员的学习成 本却是PHP成本的几倍,原因也很明朗,本身Java就不是专门给WEB开发用的。所以,Java开发电子商务的成本要远远高于PHP开发出来的同类软件 产品。但也正由于Java开发的成本较高,所以往往也是做一个同样的产品,达到同样的效果,Java需要付出比PHP开发多出N倍的时间及经济成本。直接的造成了巨大的时间及成本浪费。

    二、Java后端开发之路

    其实php和Java作为主流的服务端开发语言,并没有对错是非之分,语言的选取还是要根据自己的需要而来,这里我不再过多评论。在这篇文章里,我会简单介绍一下Java后端开发的一些事项和思路。

    1. 什么是Java后端

    所谓后端,就是服务端,接收前台传过来的信息数据,或是进行业务逻辑处理,或是与数据库进行交互(说严谨些,数据库交互也算是业务的一种,但希望你能了解我所表达的意思),服务端代码一般运行在服务器上,这也是为什么有的人也叫后端为服务器端开发(这是从广义上来讲的,因为包括数据库操作在内的后端代码通常都是挂载在服务器上,而从狭义角度来讲,服务器端只指明了服务器的行为而未包括数据库)。因此,Java后端开发就是利用Java语言,对所需的业务逻辑和数据库操作的实现。也许你觉得这个定义下的并不是很严谨,因为一个后端程序光靠Java是没法儿实现的。不用着急,接下来我还会对Java后端的开发进行更为详尽的说明,现在,你只需了解Java语言本身在后端开发中是一个怎样的角色就行。

    2. Java后端要学什么

    这一节,我会按照学习的先后顺序简单介绍一下Java后端需要的知识,这只是大致的思路,并不能兼顾现有的所有情况。比如web框架一栏,我也只是推荐了最为常见并广为应用的SSM框架,也许你在开发的过程中发现了更为优秀的框架或模式,也欢迎你告诉我。

    ①java基础

    如果你是计算机专业的学生或者说从前接触过Java编程,曾自己做过一些小程序,比如计算器、时钟,那么恭喜你,你已经完成了这一项的大半工作,接下来你需要做的就是强化封装、继承、多态、泛型(视个人爱好决定,但是写的一手好泛型将会使你的代码得到质的飞跃)、反射的相关知识,以及java的网络编程和数据库操作部分,为了工程需要,你还需要熟悉java的标准库,如集合,I/O,并发。当然随着日后软件的逐渐壮大,你也许还会用到更为深入的并发编程,这些直接在“那时”学习就行。如果你之前没有学习过Java编程,那么我推荐你先在网上找一些Java的基础教程来学习,但是不能光听课,上手练习是学习一门语言最快的方法。

    ②Web开发

    也许你会认为,后端工程师并不需要了解前端制作页面的知识。我的回答是,不尽然。虽然前后端分离是现在的趋势,但是全栈式工程师也是一抓一大把,而且当你了解前端页面的制作方法后,可以在后端制作过程中兼顾前端的功能,从而扬长避短,减少不必要的麻烦。言语是虚幻的,真正理解这句话需要你在实际开发项目中去体会。言归正传,在学习web开发之前,我仍建议你学习一些前端的知识,哪怕做不出比较美观的界面。对于学习的内容,我建议按照HTML+CSS+JavaScript的顺序来。

    在对前端的知识有一定了解后,你将要学习以下知识:(由于笔者能力有限,在这里我只告诉你一些理念和力所能及的学习网址,其详细内容还需你去查找学习)

    1. Servlet开发

    你想问什么是Servlet?这里我摘取了一部分介绍,希望对你的理解有一定的帮助。

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层

    使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。更为详细的内容可以参考上面第一个链接。

    2.JSP(J2EE)

    JSP 与 PHP、ASP、ASP.NET 等语言类似,是运行在服务端的语言。

    JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。

    JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。

    JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

    3.Tomcat

    tomcat是一个开源而且免费的jsp服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。它可实现JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的一款环境。

    可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

    你也许发现了,以上3个内容之间有着明显的联系,所以我也建议你将他们放在一起学习,值得强调的是,这部分是Java后端开发必须非常精通的部分,因此这部分是这三部分中最需要花精力的。

    4.Http协议

    对于网络开发来说,了解Http协议的内容是必要的,虽然它的内容并不多,但这里我还是将它单独作为一项放了出来,你可以通过上面的链接来了解它。

    5.开发框架

    关于这一项内容,你可以趁热打铁按着顺序学,也可以先跳过,等学习完数据库操作的相关知识后再回来补充。开发框架,顾名思义就是为了提高开发效率而引入的Web框架,你用或不用,只是开发效率的问题,甚至你自己都可以写一个新的框架。这也是我为什么把它的优先度放后。现在的主流框架是:Spring,SpringMVC,Mybatis 即SSM框架。你需要学会这三个框架的搭建,并用它们做出一个简单的增删改查的Web项目。要相对系统地入门 Spring,我推荐评价最高的两本书:《Spring实战(第4版)》和《精通Spring 4.x:企业应用开发实战》。在构建框架的时候,也许众多的配置会使你头晕,不过你也可以不去理解哪些配置都是什么含义。不明觉厉也并不会过分阻挠你将框架搭建起来。你先拿来用,解析的过程留给后面。在这里再介绍一些进阶级的框架:SpringBoot 和 SpringCloud,它们在各自的领域都有着独特的表现,其中SpringBoot则大大减少了Spring过多的配置文件,真是头发的福音。

    篇幅有限,我便不在这里深入介绍框架的内容了,你可以通过下面博客中的通道来查找自己喜欢的框架内容学习。

    ③数据库

    Java会了,网络开发也学了,接下来就是数据存储的地方——数据库方面的学习。关于数据库的学习你可以分为两步,一是先学习一个数据库的相关知识,二是学习Java连接该数据库的方法,即JDBC。

    1. SQL

    对于数据库的选取,我建议采用MySQL,它不仅对新人很友好,而且还是Java的老搭档。你需要学习它的构成,使用方法,以及SQL语句,为了方便,你可以在网上查找网络教程。

    2.JDBC

    JDBC,其实就是Java与数据库之间连接所用的规范接口,你需要弄懂JDBC API的用法,连接并能操控数据库的增删查改。

    3.关于数据库Redis和JDBC框架

    对于 Redis,因为是基于内存的,所以性能非常高,很多项目用它作缓存。虽然是一个 key - value数据库,但 value 可以是字符串(String)、哈希(Map)、列表(List)、集合(Sets)、有序集合(Sorted Sets)等类型。推荐一个菜鸟的简明教程,可以简单入门:

    书籍方面,推荐看《Redis实战》,是一本非常不错且广受好评的入门书籍。

    另外,Redis 的 Java 库叫 Jedis,也要简单了解下其用法。

    前面我们知道,Java 访问数据库的标准 API 是 JDBC,只是,直接使用 JDBC API 进行编码操作数据库的话,代码非常繁琐,可扩展性非常低,因此,才会衍生出 Hibernate、MyBatis、SpringJDBC等对 JDBC 进行了封装的 ORM 框架,以简化开发。目前最流行的还是 MyBatis,另外 MyBatis 也容易上手。

    先来了解下 ORM 这个概念,ORM = Object Relational Mapping,称为对象关系映射,即业务实体对象和关系数据库之间建立起一种映射关系,最简单的映射关系就是:一个类对应一张数据表,类的每个实例对应表中的一条记录,类的每个属性则对应表的每个字段。Hibernate 是一个标准的 ORM 框架,在实体类和数据库之间建立了完整的映射关系,基本不需要开发人员自己写 SQL,内部会自动生成 SQL 语句,因此,对于数据量非常大的应用,想要优化 SQL 语句就比较困难。MyBatis 则是一个半自动化的 ORM 框架,不同于 Hibernate 提供了从实体类到数据库表的全套映射机制,SQL 是自动生成的;而 MyBatis 则只是在实体类和 SQL 之间建立映射关系,并不自动生成 SQL 语句,因此,开发人员是需要自己写 SQL 的。这样,对 SQL 进行优化则比较方便了。

    要了解 MyBatis 的用法

    当以上内容都学习完之后,你便可以自己动手进行后端开发了,如果初次做不知道流程,可以查找教程跟着做一遍。在此,我再简单说几个开发工具,希望对你的开发会有帮助。

    顺便在这里说一下,我目前是在职Java开发,如果在学习Java的过程当中有遇见任何关于学习方法,学习路线等方面的问题,这里面聚集了很多正在学习Java技术的初学者,也有不少从事Java开发岗的大佬,与Java相关的问题都可以随时发出来讨论。我整理了这几年做开发的学习手册和开发工具等,需要的同学可自行下载。

    ④开发工具

    1. Intellij IDEA

    一种Java程序编辑器。比起eclipse,我还是更为青睐Intellij IDEA,它用起来更加的便捷舒适。

    2.Maven

    一个用于构建项目的工具,在构建SSM框架就可能会接触到。你在将项目间的依赖通过 xml 完美地组织到一起,可通过编译插件将项目编译成字节码文件。还有类似的 Gradle 也是不错的选择。

    3. Postman

    很好用的一个接口调试工具。

    3.后端的开发思路

    一般后端开发的过程分为以下几步:

    ①搭建服务器

    首先要存放后端程序代码,需要一台机器,自己的电脑虽然也可以,但是自己的电脑可不能保证24小时都开机且让外网能访问到,所以需要购买一台云服务器;其次,外网能访问到意味着需要一个公网IP,购买的云服务器会配套一个对应的IP地址。

    之后你可以购买一个域名。域名是用来映射到IP上,便于直接使用域名访问其绑定IP所在的服务器。在购买之后,不要忘了将该域名绑定到我们的服务器IP上,并且进行域名备案,使其合法化。

    最后一步是购买SSL证书(似乎有免费的),因为配置了SSL证书后可以让我们的url访问以https开头,以加密传输的方式更加安全。这也是你做微信小程序必须的要求。

    经过了这些步骤,这时我们的服务器具备了使用https协议通过域名访问的能力。接下来的工作就剩下开发我们的后端接口以及把后端程序代码部署到这台服务器上供前端访问。

    ②后端程序开发

    这里其实就是八仙过海各显神通了,主要是写后端接口和数据库等内容。在开始之前,你要决定好以下的内容:

    开发语言:Java 8

    开发集成环境:IntelliJ IDEA Ultimate 2017

    web框架:Springboot

    构建工具:Maven

    数据库:MySQL

    具体的内容当然不限于我上面所举的例子,推荐使用Maven,因为用它将项目打包很方便。

    ③部署后端程序

    首先登录购买的那台云服务器,部署前先安装好环境,主要是安装JRE和Tomcat,安装好后还需要对Tomcat进行一番配置,其中包括把我们的SSL证书配置上去。

    之后将我们之前用Maven打包好的war包拷贝到安装Tomcat的webapps目录下,然后去Tomcat的bin文件夹下运行startup.bat启动tomcat,即可自动解压war包,并部署。具体实现细节视你的情况可自行百度。随着Tomcat的配置以及部署成功,我们的后端接口就可以通过url访问到了。

     小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。
     

    原文出处:www.zhihu.com/question/19992305/answer/2376770965

    展开全文
  • 该存储库包含一个库,该库支持多个Enigma程序的后端。 该库在Kotlin中构建。 它仍然处于Alpha状态。 该项目完成后,您可以从以下下载一个jar: : 。 在完成1.0版之后,将提供带有API调用的手册。 可以在GitHub上...
  • 后端需要学习什么?

    万次阅读 多人点赞 2020-12-14 14:37:00
    后端需要学习什么? 后端程序员应该需要掌握编程语言、操作系统、数据库、服务器基础、计算机网络协议、数据结构 和算法、开发工具等相关的知识。 开篇声明:本文为尽可能追求专业、公证、准确、全面,以下内容部分...
  • Java后端开发流程

    千次阅读 2022-03-25 11:43:28
    这篇文章是对后端简单介绍,大致流程,不包括高并发框架的引用说明,如redis,rabbitMq,netty。 目录 1.分析需求 2.设计逻辑 3.开始架构设计 4.对业务编写 5.分析业务是否需要其他配置 Git使用: 6.自测...
  • C++的后端框架从头开发

    千次阅读 2021-11-17 08:23:31
    基于C++的后端框架Ratel 简介: 从开发到现在已经半个月了,我会进行长期地开发、维护和优化,直到它变得完善。各种建议和错误读者都可以和我联系,从公众号中就可以找到...目前已有功能: Linux和Windows跨平台运行
  • 一个后端软件工程师的基本工作职业是完成后端程序的设计与开发。而后端开发的工作流程往往包括以下几个方面。 确定需求:后端的需求从产品经理来,在确定产品需求的过程中,后端工程师必须确定产品需求是否存在逻辑...
  • 软件开发流程 前后端未分离时代(各种耦合) 前后端未分离时代,页面逻辑处理以及页面渲染全部由后端完成。如最具代表性的 MVC 三层框架。用户发起请求至服务端控制层(Controller),控制层通过调用模型处理器...
  • 鉴于开发人员可能参与的技术分支的多样性,本文介绍了一些可能对后端开发人员有用的工具。 1.阿尔萨斯Java在线诊断工具 Arthas是一款用于Java应用程序的在线诊断工具,由阿里巴巴于2018年9月开源。 典型场景: 您不...
  • 比如,我们要测试一个接口的返回,那么我们测试的时候,会有一个输入的参数,服务端接收到了后会返回一些数据,然后客户端会利用这些数据展示一些相应的结果,如果符合最开始的预期则功能正确。 ...
  • 前端是Vue.js编写的,后端是node,js编写的接口,还有文档说明都有,包括数据库文件
  • 本文旨在强调一些最好的无代码/低代码后端平台,供你在2022年使用。我们强调他们的独特功能,工具是否提供可扩展性,以及是否足够灵活。 无代码和低代码开发平台让全世界的人们在不写代码的情况下建立他们的业务...
  • Web前端和后端哪些区别?需要掌握的技术有什么区别?下面和千锋广州小编一起来看看吧! Web前端分为网页设计师、网页美工、Web前端开发工程师。 首先网页设计师是对网页的架构、色彩以及网站的整体页面代码负责。 ...
  • 互联网后端基础设施,都有哪些

    千次阅读 2020-03-09 10:12:00
    来源:后端技术杂谈链接:http://www.rowkey.me/blog1后端基础设施使用Java后端技术的目的就是构建业务应用,为用户提供在线或者离线服务。因此,一个业务应用需要哪...
  • 前端和后端分别是什么?有哪些区别呢?

    万次阅读 多人点赞 2020-06-10 15:10:26
    多数后端开发人员从事于构建工作应用程序背后的实际逻辑。前后端需要相互配合,共同完成一个项目。那到底什么是前端?什么是后端呢? 接下来带你一起来了解前端与后端技术的区别。 一、什么是前端开发? 1、前端...
  • 完整的后端设计由后端半定制和后端全定制两个设计部分组成: 后端全定制设计是指在设计初期最先按照设计需求设计出的物理库单元,物理单元库由标准单元库、IP库及满足特殊需求的定制部件单元等组成,该物理库为后续...
  • 其中包含的应用程序是提议的社交网络平台的功能后端。 它是用Node,MongoDB,Mongoose,ExpressJS,MomentJS,NoDemon,NoSQL构建的,并利用了Model-View-Controller架构。 目录 用法 克隆存储库,导航到根文件夹,...
  • 包含小程序,后台管理系统,服务后端,小程序包含商品浏览,商品详情,分类浏览,微信授权登录,微信支付等功能
  • Java后端技术概览

    2022-06-10 15:08:04
    后端应用开发完成之后是需要部署到服务器上对外提供服务的。从最开始的直接在物理机上部署服务到后来的虚拟环境、云环境再到现在火热的容器,直至最近兴起的无服务器技术。都是为了让服务的运行环境能够更加便于建立...
  • 后端知识点 文章目录 背景 Cron表达式 Quartz 1、核心要素 2、Trigger 3、Job 4、调度过程 5、调度信息的存储 6、关注问题 背景 定时任务在后端程序开发中有着广泛的应用场景,例如: 银行缴费系统的对账。...
  • Python开发框架有助于促进快速软件开发,这节约了时间,有助于创建更为稳定的程序,并减少开发者的重复编写代码的劳动。这些框架还通过确保正确的数据库操作以及只在表现层编程的方式帮助初学者创建稳定的程序。...
  • 因此,一个业务应用需要哪些技术、依赖哪些基础设施就决定了需要掌握的后端技术有哪些。纵观整个互联网技术体系再结合公司的目前状况,笔者认为必不可少或者非常关键的后端基础技术/设施如下图所示:这里的后端基础...
  • java抽奖接口后台管理源码(包含xml,controller,service.html),与我上传的资源后端接口,前端展示,后台管理一套
  • 目录 理解前后端 后端要干些啥呢 浅整理一下 理解前后端 在一家软件公司里面,我们经常把开发人员分为前端开发人员,后端开发人员,那么我们怎么界定前端开发和后端开发呢。简单地说就是用户在屏幕上看到的和触摸到...
  • 后端技术体系框架

    千次阅读 2021-08-28 22:47:21
    因此,一个业务应用需要哪些技术、依赖哪些基础设施就决定了需要掌握的后端技术有哪些。纵观整个互联网技术体系再结合公司的目前状况,笔者认为必不可少或者非常关键的后端基础技术/设施如下图所示: 这里的后端...
  • Web后端开发入门(1)

    万次阅读 多人点赞 2018-07-10 20:23:48
     WebSphere Application Server是一种功能完善、开放的Web应用程序服务器,是IBM公司电子商务计划的核心部分,它是基于Java的应用环境,用于建立、部署和管理Internet和Intranet Web应用程序。这一整套产品进行了...
  • C++后端开发知识点总结

    千次阅读 2021-08-20 15:29:43
    C++后端开发知识点总结 C++后端开发知识点总结 C++ 1. 全局变量的作用域与初始化 2. 字节对齐的计算方法 3. 类的静态成员 4. 纯虚函数的用法 5. 构造函数和析构函数的执行顺序 6. 类的作用域 7. STL相关数据结构的...
  • Java 后端开发通常会涉及到很多第三方服务,那么都有哪些成熟的方案可供直接上手使用呢? 1)IaaS IaaS 的英文全称是 Infrastructure as a Service,即基础设施服务,指把 IT 基础设施作为一种服务通过网络对外...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 118,776
精华内容 47,510
热门标签
关键字:

后端软件功能包括哪些