精华内容
下载资源
问答
  • 后端常用开源组件合集(持续更新中)
    2018-04-23 10:43:53

    1. 常用库

    awesome - golang开源库集合

    2. 编码规范

    cppguide - C++编码规范
    CodeReviewComments - go code review建议

    3. 敏捷开发工具

    wekan-用于实践敏捷开发的看板

    4. 数据分析:

    matomo - 类似于googel分析的项目

    5. RPC 框架

    grpc - googel开源的rpc框架,基于protobuf,跨语言.
    brpc - 百度开源的rpc框架
    tars - 腾讯开源的rpc框架
    dubbo - 阿里开源的rpc框架,国内java圈很火.

    6. 分布式协调系统

    zookeeper - 简单来说就是一个java实现的强一致的kv存储系统.
    etcd - go版zookeeper.

    7. 负载均衡

    nginx - 四层,七层代理
    haproxy - 类似于nginx
    traefik - go语言编写,天然支持集成k8s.
    kong - 网关,基于nginx的扩展,更方便进行管理.

    8. 服务器运维工具

    jumpserver - 服务器登录堡垒机
    saltstack - 服务器批量管理工具
    ansible - 服务器批量管理工具,基于ssh,相比saltstack来说,不用安装agent.

    9. 存储

    9.1 对象存储

    minio
    ceph

    9.2 缓存

    redis - 支持多少数据结构,集群性扩展,高性能.

    9.3 NewSql 数据库

    tidb - 底层kv实现扩展,上层支持关系性数据库协议,如mysql.
    cockroach - 类似tidb

    10. 容器与资源编排

    moby - 容器,曾用名docker.
    kubernetes - google的容器编排

    11. 服务监控以及调用追踪(APM)

    prometheus - 国外用的较多的监控系统
    open-falcon - 国内用的较多的监控系统
    opencensus-go - googel新搞的
    opentracing - 分布式调用链追踪的定义
    zipkin - opentracing的开源实现
    jaeger - uber搞的go版本zipkin
    incubator-skywalking - 集监控与追踪于一声的apache项目

    更多相关内容
  • 后端开源项目推荐

    2021-02-01 13:32:49
    国内的开源环境已经相当好,但是国内开发注重是应用,创新有但不多,从榜单可以看出,专门搞技术的还是少数,结合项目实践的站大多数,分享给你们,架构的时候可以参考这些解决方案,传送门:gogeeks.cn zheng征...

    国内的开源环境已经相当好,但是国内开发注重是应用,创新有但不多,从榜单可以看出,专门搞技术的还是少数,结合项目实践的站大多数,分享给你们,架构的时候可以参考这些解决方案,传送门:gogeeks.cn

    zheng征项目(stars 5.6k)

    基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构,提供整套公共微服务服务模块:集中权限管理(单点登录)、内容管理、支付中心、用户管理(支持第三方登录)、微信平台、存储系统、配置中心、日志分析、任务和通知等,支持服务治理、监控和追踪,努力为中小型企业打造全方位J2EE企业级开发解决方案。

    地址:https://gitee.com/shuzheng/zheng

    JFinal(stars 4.8k)

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 :)

    地址:http://www.jfinal.com/

    SpringBoot-Learning(stars 4.6k)

    Spring Boot教程与Spring Cloud教程

    地址:https://gitee.com/didispace/SpringBoot-Learning

    iBase4J(stars 4.1k)

    AVA分布式快速开发平台:SpringBoot,SpringMVC,Mybatis,mybatis-plus,motan/dubbo分布式,Redis缓存,Shiro权限管理,Spring-Session单点登录,Quartz分布式集群调度,Restful服务,QQ/微信登录,App token登录,微信/支付宝支付;日期转换、数据类型转换、序列化、汉字转拼音、身份证号码验证、数字转人民币、发送短信、发送邮件、加密解密、图片处理、excel导入导出、FTP/SFTP/fastDFS上传下载、二维码、XML读写、高精度计算、系统配置工具类等等。

    地址:https://gitee.com/iBase4J/iBase4J

    JeeSite(stars 3.1k)

    JeeSite 是一个企业信息化开发基础平台,Java EE(J2EE)快速开发框架,使用经典技术组合(Spring、Spring MVC、Apache Shiro、MyBatis、Bootstrap UI),包括核心模块如:组织机构、角色用户、权限授权、数据权限、内容管理、工作流等。

    地址:https://gitee.com/thinkgem/jeesite

    jeewx(stars 2.6k)

    Jeewx是一款开源、免费的微信管家系统(多触点管理平台)。采用JAVA语言,支持微信公众号、微信企业号、支付宝服务窗、QQ公众号、微博账号等多触点管理。Jeewx实现了微信、支付窗、微信企业号、微博等触点的基础管理功能,便于用户二次开发。2014年荣获CSDN开发商大会第一名

    地址:https://gitee.com/jeecg/jeewx

    MCMS建站系统(stars 2.5k)

    完整开源!Java快速开发平台!基于Spring、SpringMVC、Mybatis架构,MStore提供更多好用的插件与模板(文章、商城、微信、论坛、会员、评论、支付、积分、工作流、任务调度等,同时提供上百套免费模板任意选择),价值源自分享!铭飞系统不仅一套简单好用的开源系统、更是一整套优质的开源生态内容体系。铭飞的使命就是降低开发成本提高开发效率,提供全方位的企业级开发解决方案,每月28定期更新版本

    地址:https://gitee.com/mingSoft/MCMS

    t-io(stars 2.3k)

    t-io是基于jdk aio实现的易学易用、稳定耐操、性能强悍、将多线程运用到极致、内置功能丰富、核心代码只有3000多行(2017年05月13号统计)的即时通讯框架(广义上的即时通讯,并非指im),字母 t 寓意talent。

    地址:https://gitee.com/tywo45/t-io

    CMS(stars 2.1k)

    一款使用Java语言开发的CMS,使用了Spring MVC,Spring,MyBatis等流行框架,提供首页大图管理、目录管理、文章管理和管理员管理等功能。是学习和二次开发的首选

    地址:https://gitee.com/shishuo/CMS

    hutool(stars 2k)

    一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件: 1. 布隆过滤 2. 缓存 3. 数据库ORM(基于ActiveRecord思想)4. HTTP客户端 5. IO 6. JSON 7. 日志 8. System(JVM和系统信息等) 9. Setting(一种扩展Properties的配置文件)

    地址:https://gitee.com/loolly/hutool

    •  
    展开全文
  • 一些优秀的后端开源项目!

    千次阅读 2021-12-30 01:31:46
    hi 大家好,今天给大家推荐一些值得学习的开源项目,包括C, C++,Golang,Java等后台开发主流语言的项目,大家工作之余,可以花点时间学习和研究这些项目的优秀设计和实现,提高自己...

    hi 大家好,今天给大家推荐一些值得学习的开源项目,包括C, C++,Golang,Java等后台开发主流语言的项目,大家工作之余,可以花点时间学习和研究这些项目的优秀设计和实现,提高自己

    a21355df6da0fd995ce579e3010f0997.png

    学习开源项目好处

    首先是提升编程技能。对计算机专业相关的学生而言,在学习编程后,能验证能力的只是一些简单项目,但通过阅读开源项目的源码,你不仅可以学习顶级项目的设计思路,还可以学习顶级开发者的编程思路,比如通过学习提升代码的可读性和简洁性。同时,你也可以提交PR、注释,而社区里的资深工程师会给出直接反馈,这比你自己摸索要成长得更快。

    其次能帮你找到满意的工作。如果你在开源项目上留下印记,无论是贡献代码、技术文档、应用案例等等,这些都能证明个人能力,甚至,有时你的简历只需放上GitHub个人账号链接就已足够:)

    最后,开源也许会成为你热衷的事业。处在这样一个开源崛起的时代,尤其在国内很多顶级项目不断催生,现在正是那些热爱开源理念和开源软件的开发者大展鸿图的时候,他们有的在学生时代就已学习和贡献开源,开源世界为他们带来了荣誉和快乐,而他们在未来也致力于开发和运营开源软件。

    总之,对于高校学生或者已经工作几年同学,只要你能通过开源项目的代码证明自己的实力,这无疑像是拿到了观看球赛的前排门票,你不会再因为“内卷”而发愁,因为你的前方视野足够辽阔。

    想学习开源的同学,欢迎加入极客星球,让我们一起来学习开源项目,提高自己。

    详细参考:极客星球

    如何学习开源项目

    首先了解整体架构

    查找和阅读该项目的博客和资料,通过google你能找到某个项目大体介绍的博客,快速阅读一下就能对项目的目的、功能、基本使用有个大概的了解。

    先把项目跑起来

    如果该项目有提供现成的example工程,首先尝试按照开始文档的介绍运行example,如果运行顺利,那么恭喜你顺利开了个好头;如果遇到问题,首先尝试在项目的FAQ等文档里查找答案,再次,可以将问题(例如异常信息)当成关键词去搜索,查找相关的解决办法,你遇到了,别人一般也会遇到,热心的朋友会记录下解决的过程;最后,可以将问题提交到项目的邮件列表,请大家帮你看看。在没有成功运行example之前,不要尝试修改example。

    如果时间允许,尝试从源码构建该项目。通常开源项目都会提供一份构建指南,指导你如何搭建一个用于开发、调试和构建的环境。尝试构建一个版本。

    阅读源码建议
    (1)阅读源码之前,查看该项目是否提供架构和设计文档,阅读这些文档可以了解该项目的大体设计和结构,读源码的时候不会无从下手。
    (2)阅读源码之前,一定要能构建并运行该项目,有个直观感受。
    (3)阅读源码的第一步是抓主干,尝试理清一次正常运行的代码调用路径,这可以通过debug来观察运行时的变量和行为。修改源码加入日志和打印可以帮助你更好的理解源码。
    (4)适当画图来帮助你理解源码,在理清主干后,可以将整个流程画成一张流程图或者标准的UML图,帮助记忆和下一步的阅读。
    (5)挑选感兴趣的“枝干”代码来阅读,比如你对网络通讯感兴趣,就阅读网络层的代码,深入到实现细节,如它用了什么库,采用了什么设计模式,为什么这样做等。如果可以,debug细节代码。
    (6)阅读源码的时候,重视单元测试,尝试去运行单元测试,基本上一个好的单元测试会将该代码的功能和边界描述清楚。
    (7)在熟悉源码后,发现有可以改进的地方,有精力、有意愿可以向该项目的开发者提出改进的意见或者issue,甚至帮他修复和实现,参与该项目的发展。

    开启自己的开源项目

    通常在阅读文档和源码之后,你能对该项目有比较深入的了解了,但是该项目所在领域,你可能还想搜索相关的项目和资料,看看有没有其他的更好的项目或者解决方案。在广度和深度之间权衡。

    C经典开源项目

    1.Libev

    libev是一个全功能和高性能的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。

    特点

    • 不使用全局变量,而是每个函数都有一个循环上下文。

    • 对每种事件类型使用小的观察器(一个I/O观察器在x86_64机器上使用56字节,而用libevent的话使用136字节)。

    • 没有http库等组件。libev的功能非常少。

    • 允许更多事件类型,例如基于wall clock或者单调时间的定时器、线程间中断等等。

    更简单地说,libev的设计遵循UNIX工具箱的哲学,尽可能好地只做一件事。

    整体架构:

    b5adab1cd3c7ca80397a38c68a6e19ef.png

    开源地址:

    https://github.com/enki/libev

    2. Redis

    1547e5b1e9afda3ea882aeb9646fe58a.png

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

    代码架构:

    71ced4cf42ba8fbcd13b6444c104ea49.png

    开源地址:

    https://github.com/redis/redis

    3. Nginx

    406943ddfb5a2c8593ee9b63e463c06a.png

    Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

    特点:

    • Nginx可以部署在网络上使用FastCGI脚本、SCGI处理程序、WSGI应用服务器或Phusion Passenger模块的动态HTTP内容,并可作为软件负载均衡器。

    • Nginx使用异步事件驱动的方法来处理请求。Nginx的模块化事件驱动架构可以在高负载下提供更可预测的性能。

    • Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。与旧版本(≤2.2)的Apache不同,Nginx不采用每客户机一线程的设计模型,而是充分使用异步逻辑从而削减了上下文调度开销,所以并发服务能力更强。整体采用模块化设计,有丰富的模块库和第三方模块库,配置灵活。在Linux操作系统下,Nginx使用epoll事件模型,得益于此,Nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue。

    整体架构:

    1910ec83b9b49f36c4c1e104d4ec6019.png

    开源地址:

    https://github.com/nginx/nginx

    4.SQLite

    SQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。其特点是高度便携、使用方便、结构紧凑、高效、可靠。足够小,大致3万行C代码,250K。

    整体架构:

    5e94d6b4e5b5e364b7aa063e2d685f01.png

    开源地址:

    http://www.sqlite.org/

    5.Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,目前最为流行后台服务器操作系统。

    整体架构:

    73a7d4f2767cbc19564f030ab1a2992f.png

    Linux内核学习分为四个阶段。

    • 首先,了解操作系统基本概念。

    • 其次,了解Linux内核机制(大的框架和架构,不要在乎细节)。

    • 其次,研读内核源码(选择自己感兴趣的方向,比如调度(计算),虚拟化,网络,内存,存储等)。

    最后,确定个人的发展方向

    • 设备驱动开发方向(嵌入式)

    • 云网络开发方向(云计算)

    • 虚拟化方向(云计算)

    • 云存储方向(云计算)

    • Linux应用开发方向(Linux后台开发)

    开源地址:

    https://www.kernel.org/

    C++开源项目

        1.TinyWebServer(初学者)

    这是一个帮助初学者快速实现网络编程、搭建属于自己的轻量级Web服务器的小项目。

    项目虽小但真的五脏俱全:

    • 使用线程池、非阻塞Socket、epoll(ET/LT均实现)、事件处理(Reactor及模拟Proactor)的并发模型。

    • 使用状态机解析HTTP请求报文,支持解析GET和POST请求

    • 访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件

    • 实现同步/异步日志系统,记录服务器运行状态

    • 经Webbench压力测试可以实现上万的并发连接数据交换

       代码地址:

    https://github.com/qinguoyi/TinyWebServer

    2.sylar

    C++高性能分布式服务器框架,功能最全webserver/websocket server,自定义tcp_server(包含日志模块,配置模块,线程模块,协程模块,协程调度模块,io协程调度模块,hook模块,socket模块,bytearray序列化,http模块,TcpServer模块,Websocket模块,Https模块等, Smtp邮件模块, MySQL, SQLite3, ORM,Redis,Zookeeper)。

    优点:

    • 基于epoll的IO复用机制实现Reactor模式,采用边缘触发(ET)模式,和非阻塞模式

    • 由于采用ET模式,read、write和accept的时候必须采用循环的方式,直到error==EAGAIN为止,防止漏读等清况,这样的效率会比LT模式高很多,减少了触发次数

    • Version-0.1.0基于单线程实现,Version-0.2.0利用线程池实现多IO线程,Version-0.3.0实现通用worker线程池,基于one loop per thread的IO模式,Version-0.4.0增加定时器,Version-0.5.0增加简易协程实现和异步日志实现

    • 线程模型将划分为主线程、IO线程和worker线程,主线程接收客户端连接(accept),并通过Round-Robin策略分发给IO线程,IO线程负责连接管理(即事件监听和读写操作),worker线程负责业务计算任务(即对数据进行处理,应用层处理复杂的时候可以开启)基于时间轮实现定时器功能,定时剔除不活跃连接,时间轮的插入、删除复杂度为O(1),执行复杂度取决于每个桶上的链表长

    • 采用智能指针管理多线程下的对象资源增加简易协程实现,目前版本基于ucontext.h(供了解学习,尚未应用到本项目中)From:

    • simple-coroutine增加简易C++异步日志库 From: simple-log

    • 支持HTTP长连接

    • 支持优雅关闭连接

    • 通常情况下,由客户端主动发起FIN关闭连接客户端发送FIN关闭连接后,服务器把数据发完才close,而不是直接暴力close,如果连接出错,则服务器可以直接close.

    代码地址:

    https://github.com/sylar-yin/sylar

    3. OpenSSL

    一个强大的安全套接字层密码库,加密HTTPS,加密SSH都贼好用,同时它还可以用于跨平台密码工具。

    OpenSSL实现了以下功能:

    • 数据保密性:信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。

    • 数据完整性:加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。

    • 安全验证:加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。

    代码地址:

    https://www.openssl.org/source

    4.LevelDB 

    LevelDB 是一个由 Google 编写的快速键值存储库,它提供了从字符串键到字符串值的有序映射。

    LevelDB 有以下优点:

    • 提供应用程序运行上下文,方便跟踪调试

    • 可扩展的、多种方式记录日志,包括命令行、文件、回卷文件、内存、syslog服务器、Win事件日志等

    • 可以动态控制日志记录级别,在效率和功能中进行调整

    • 所有配置可以通过配置文件进行动态调整

    • 支持Java、C++、C、python等多种语言

    整体架构:

    f8824921118b66f6fd3ae2f290a29a60.png

    • MemTable:内存数据结构,具体实现是 SkipList。接受用户的读写请求,新的数据修改会首先在这里写入。

    • Immutable MemTable:当 MemTable 的大小达到设定的阈值时,会变成 Immutable MemTable,只接受读操作,不再接受写操作,后续由后台线程 Flush 到磁盘上。

    • SST Files:Sorted String Table Files,磁盘数据存储文件。分为 Level0 到 LevelN 多层,每一层包含多个 SST 文件,文件内数据有序。Level0 直接由 Immutable Memtable Flush 得到,其它每一层的数据由上一层进行 Compaction 得到。

    • Manifest Files:Manifest 文件中记录 SST 文件在不同 Level 的分布,单个 SST 文件的最大、最小 key,以及其他一些 LevelDB 需要的元信息。由于 LevelDB 支持 snapshot,需要维护多版本,因此可能同时存在多个 Manifest 文件。

    • Current File:由于 Manifest 文件可能存在多个,Current 记录的是当前的 Manifest 文件名。

    • Log Files (WAL):用于防止 MemTable 丢数据的日志文件。

    开源地址:

    https://github.com/google/leveldb

    5.Chromium

    Chromium是由Google主导开发的网页浏览器。以BSD许可证等多重自由版权发行并开放源代码,Chromium的开发可能早自2006年即开始. Chromium 是Google 的Chrome浏览器背后的引擎,其目的是为了创建一个安全、稳定和快速的通用浏览器.

    整体架构:

    6ad1aa51642f7dab551b15c4f18982e0.png

    chromium的代码目录包含这些模块:

    base:通用代码集和基础组件实现库,包含字符串、文件、线程、消息队列等工具类集合。

    cc:负责渲染绘制,chrome为什么高效就是因为有它。chrome:浏览器界面模块,大量调用了cc提供的接口。

    content:多进程沙盒浏览器莫款,管理多进程和多线程。

    gpu,OpenGL封装实现:CommandBuffer和OpenGL的兼容支持模块。

    net:网络功能实现模块。

    media:多媒体封装代码,实现视频播放等功能。

    mojo:跨语言(C++ / Java / JavaScript)跨平台的进程间对象通信模块,类似AIDL的功能。

    skia:图形库。

    third_party:排版引擎。

    ui:UI库。

    ipc: 网络进程通信模块。

    v8,V8 JavaScript 引擎库。

    以上每一个模块要想真正理解,都得花很大的功夫,简单用一张图来说明以上模块的关系:

    235316517a717d95339edc9ec79b2373.png

    开源地址:

    https://chromium.googlesource.com/chromium/src.git

    Go经典开源项目

    Golang有哪些好像优秀的项目呢?列举一下我收集到的golang开发的优秀项目。

    1.docker

    golang头号优秀项目,通过虚拟化技术实现的操作系统与应用的隔离,也称为容器。

    特点:

    • Docker是世界领先的软件容器平台。

    • Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docke最初实现是基于LXC。

    • Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。

    • 用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

    整体架构:

    2e3d827e40d7626264432d9cd9c7e51a.png

    开源地址:

    https://github.com/docker

    2.kubernetes

    Kubernetes(常简称为K8s)是用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。

    特点:

    • 跨主机编排容器

    • 更充分地利用硬件资源来最大化地满足企业应用的需求

    • 可移植 : 支持公有云,私有云,混合云,多重云

    • 可扩展 : 模块化,插件化,可挂载,可组合,支持各种形式的扩展

    • 自动化 : 自动部署,自动重启,自动复制,自动伸缩/扩展,通过声明式语法提供了

    整体架构:

    b68c67e2805d35a52338a59fd1266647.png

    • etcd保存了整个集群的状态;

    • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;

    • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;

    • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;

    • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;

    • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);

    • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

    Kubernetes设计理念和功能其实就是一个类似Linux的分层架构,如下图所示:

    981750f5d32cf12e23fb3acc4f056009.png

    • 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

    • 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

    • 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)

    • 接口层:kubectl命令行工具、客户端SDK以及集群联邦

    • 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴

      Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等

      Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

    开源地址:

    https://github.com/kubernetes/kubernetes

    3.etcd

    etcd 是 CoreOS 团队于 2013 年 6 月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。

    特点:

    • 简单:定义明确、面向用户的 API (gRPC)

    • 安全:具有可选客户端证书身份验证的自动 TLS

    • 快速:基准测试为 10,000 次写入/秒

    • 可靠:使用 Raft 正确分布

    • etcd 是用 Go 编写的,使用Raft共识算法来管理高可用的复制日志。

    • 许多公司在生产中使用 etcd ,在关键部署场景中,开发团队支持它,在这些场景中,etcd 经常与Kubernetes、locksmith、vulcand、Doorman等应用程序合作。严格的测试进一步确保了可靠性。


    整体架构:

    c5f9a3b86a20e2e469bc1fe0a521f3d9.png

    • httpserver
      etcd node之间进行通信,接收来自其他node的消息;

    • raft
      实现分布式一致性raft协议, raft模块与server模块的通信采用了四个channel:

      • propc:处理client来的命令

      • recvc:处理http消息

      • readyc: 消息经过raft处理之后封装成Ready交给server处理

      • advanceC:server处理一条消息之后通知raft

    • WAL
      server为了防止数据丢失而实现的write ahead log,与很多数据库的实现类似

    • snapshotter

      防止wal的无限制增长,定期生成snap文件仅保留 term,index以及key value data;

    • mvcc

      实现多版本的并发控制,使用revision(main和sub)来描述一个key的整个过程,从创建到删除。mvcc中还包含了watcher,用于实现监听key,prefix, range的变化。

    • backend & boltdb

      持久化key value到boltdb数据库

    • raftlog

      raftlog模块包含unstable和raft的snapshot,unstable保存log entries,但是entries数量比较多的时候,就需要compact,创建一个snapshot,这里的snapshot还是保存在memory中的。raft模块会定时收集entries交给server处理。

    开源地址:
    https://github.com/etcd-io/etcd

    4.Tidb

    TiDB(“Ti”代表 Titanium)是一个开源的 NewSQL 数据库,支持混合事务和分析处理 (HTAP) 工作负载。它兼容 MySQL,具有水平可扩展性、强一致性和高可用性。

    特点:

    • 水平可扩展性

      TiDB 通过简单地添加新节点来扩展 SQL 处理和存储。这使得基础设施容量规划比仅垂直扩展的传统关系数据库更容易且更具成本效益。

    • MySQL 兼容语法

      TiDB 就像是您的应用程序的 MySQL 5.7 服务器。您可以继续使用所有现有的 MySQL 客户端库,并且在许多情况下,您不需要更改应用程序中的任何一行代码。由于 TiDB 是从头开始构建的,而不是 MySQL 的 fork,请查看已知兼容性差异列表。

    • 分布式事务

      TiDB 在内部将表分片成基于范围的小块,我们称之为“区域”。每个 Region 默认大小约为 100 MiB,TiDB 使用优化的两阶段提交来确保 Region 以事务一致的方式维护。

    • 云原生

      TiDB 旨在在云中工作——公共、私有或混合——使部署、供应、操作和维护变得简单。TiDB 的存储层,称为 TiKV,是一个Cloud Native Computing Foundation (CNCF) 毕业项目。TiDB 平台的架构还允许 SQL 处理和存储以非常云友好的方式相互独立扩展。

    • 最小化 ETL

      TiDB 旨在支持事务处理 (OLTP) 和分析处理 (OLAP) 工作负载。这意味着,虽然传统上您可能在 MySQL 上进行交易,然后将 (ETL) 数据提取、转换和加载到列存储中以进行分析处理,但不再需要此步骤。

    • 高可用性

      TiDB 使用 Raft 共识算法来确保数据在 Raft 组中的整个存储中的高可用和安全复制。如果发生故障,Raft 组会自动为故障成员选举新的领导者,并在无需任何人工干预的情况下自愈 TiDB 集群。故障和自愈操作对应用程序也是透明的。

    整体架构:

    1ab125ca0c2c371af5fcbd84ebf1df14.png

    开源地址:

    https://github.com/pingcap/tidb

    5.Netpoll vs gnet

    Netpoll是字节跳动内部的 Golang 高性能、I/O 非阻塞的网络库,专注于 RPC 场景。

    开源社区目前缺少专注于 RPC 方案的 Go 网络库。类似的项目如:evio、gnet 等,均面向 Redis、Haproxy 这样的场景。因此 Netpoll 应运而生,它借鉴了 evio 和 Netty 的优秀设计,具有出色的性能,更适用于微服务架构。

    整体架构:

    ec603b13647626a19aa90cdbef48a3d9.png

    • netpoll 将 Reactor 以 1:N 的形式组合成主从模式。

    • MainReactor 主要管理 Listener,负责监听端口,建立新连接;

    • SubReactor 负责管理 Connection,监听分配到的所有连接,并将所有触发的事件提交到协程池里进行处理。

    • netpoll 在 I/O Task 中引入了主动的内存管理,向上层提供 NoCopy 的调用接口,由此支持 NoCopy RPC。

    • 使用协程池集中处理 I/O Task,减少 goroutine 数量和调度开销。

    开源地址:

    https://github.com/cloudwego/netpoll

    gnet

    d54dd01b22a240e8c7066d586a04b90d.png

    gnet的卖点在于它是一个高性能、轻量级、非阻塞的纯 Go 实现的传输层(TCP/UDP/Unix Domain Socket)网络框架,开发者可以使用 gnet 来实现自己的应用层网络协议(HTTP、RPC、Redis、WebSocket 等等),从而构建出自己的应用层网络应用:比如在 gnet 上实现 HTTP 协议就可以创建出一个 HTTP 服务器 或者 Web 开发框架,实现 Redis 协议就可以创建出自己的 Redis 服务器等等。

    gnet,在某些极端的网络业务场景,比如海量连接、高频短连接、网络小包等等场景,gnet 在性能和资源占用上都远超 Go 原生的 net 包(基于 netpoller)。

    7c7bcf4b14526606e5644832b3f4e46d.png

    主从 Reactors + Goroutine Pool 模型

    🚀 功能

    • [x] 高性能的基于多线程/Go程网络模型的 event-loop 事件驱动

    • [x] 内置 goroutine 池,由开源库 ants 提供支持

    • [x] 内置 bytes 内存池,由开源库 bytebufferpool 提供支持

    • [x] 整个生命周期是无锁的

    • [x] 简单易用的 APIs

    • [x] 基于 Ring-Buffer 的高效且可重用的内存 buffer

    • [x] 支持多种网络协议/IPC 机制:TCPUDP 和 Unix Domain Socket

    • [x] 支持多种负载均衡算法:Round-Robin(轮询)Source-Addr-Hash(源地址哈希) 和 Least-Connections(最少连接数)

    • [x] 支持两种事件驱动机制:「Linux」 里的 epoll 以及 「FreeBSD/DragonFly/Darwin」 里的 kqueue

    • [x] 支持异步写操作

    • [x] 灵活的事件定时器

    • [x] SO_REUSEPORT 端口重用

    • [x] 内置多种编解码器,支持对 TCP 数据流分包:LineBasedFrameCodec, DelimiterBasedFrameCodec,FixedLengthFrameCodec和

      LengthFieldBasedFrameCodec,参考自 netty codec,而且支持自定制编解码器

    • [x] 支持 Windows 平台,Go 标准网络库

    • [ ] 实现 gnet 客户端

    Github: 

    https://github.com/panjf2000/gnet

    Java经典开源项目

    这里推荐一些最值得阅读优秀的Java开源项目。

    1.Netty

    Netty是一个Java NIO技术的开源异步事件驱动的网络编程框架,用于快速开发可维护的高性能协议服务器和客户端。

    3f776bd69b3884f0044bab1327167853.png

    往通俗了讲,可以将Netty理解为:一个将Java NIO进行了大量封装,并大大降低Java NIO使用难度和上手门槛的超牛逼框架。

    特点:

    设计

    • 各种传输类型的统一 API - 阻塞和非阻塞套接字

    • 基于灵活和可扩展的事件模型,允许清晰的关注点分离

    • 高度可定制的线程模型——单线程、一个或多个线程池,如 SEDA

    • 真正的无连接数据报套接字支持(自 3.1 起)

    便于使用

    • 有据可查的 Javadoc、用户指南和示例

    • 没有额外的依赖,JDK 5 (Netty 3.x) 或 6 (Netty 4.x) 就足够了

      • 注意:某些组件(例如 HTTP/2)可能有更多要求。 有关更多信息,请参阅 要求页面。

    表现

    • 更高的吞吐量,更低的延迟

    • 更少的资源消耗

    • 最小化不必要的内存复制

    安全

    • 完整的 SSL/TLS 和 StartTLS 支

    开源地址:

    https://github.com/netty/netty

    2.J2EE框架 Spring

    star:45.1k; fork:31.8k

    757ee494808d54ee7ec7a21d280c5d4f.png

    Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本。该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一书中的代码,最初由 Rod Johnson 和 Juergen Hoeller等开发。Spring Framework 提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。

    Spring 中包含的关键特性:

    • 强大的基于 JavaBeans 的采用控制翻转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。

    • 一个可用于从 applet 到 Java EE 等不同运行环境的核心 Bean 工厂。

    • 数据库事务的一般化抽象层,允许宣告式(Declarative)事务管理器,简化事务的划分使之与底层无关。

    • 内建的针对 JTA 和 单个 JDBC 数据源的一般化策略,使 Spring 的事务支持不要求 Java EE 环境,这与一般的 JTA 或者 EJB CMT 相反。

    • JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码), 简化了错误处理, 大大减少了程序员的编码量. 再次利用JDBC时,你无需再写出另一个 '终止' (finally) 模块. 并且面向JDBC的异常与Spring 通用数据访问对象 (Data Access Object) 异常等级相一致.

    • 以资源容器,DAO 实现和事务策略等形式与 Hibernate,JDO 和 iBATIS SQL Maps 集成。利用众多的翻转控制方便特性来全面支持, 解决了许多典型的Hibernate集成问题. 所有这些全部遵从Spring通用事务处理和通用数据访问对象异常等级规范.

    • 灵活的基于核心 Spring 功能的 MVC 网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如 JSP,FreeMarker,Velocity,Tiles,iText 以及 POI。值得注意的是,Spring 中间层可以轻易地结合于任何基于 MVC 框架的网页层,例如 Struts,WebWork,或 Tapestry。

    • 提供诸如事务管理等服务的面向方面编程框架。

    开源地址:

    https://github.com/spring-projects/spring-framework

    3.Android 开源框架 EventBus Android

    star:23.1k; fork:4.6k

    760c34410ab752ad5e7c06e92ff1168b.png

    如果你学习过设计模式,那么当想通知其他组件某些事情发生时你一定会使用观察者模式。好了,既然能想到这个设计模式,那么就来看一个屌爆天的Android开源框架EventBus。主要功能是替代Intent、Handler、BroadCast在Fragment、Activity、Service、线程之间传递消息。他的最牛逼优点是开销小,代码简洁,解耦代码。

    特点:

    • 简化组件之间的通信

    • 分离事件发送者和接收者

    • 在 UI 工件(例如活动、片段)和后台线程中表现良好

    • 避免复杂且容易出错的依赖关系和生命周期问题

    • 很快;专为高性能而优化

    • 很小(~60k jar)

    • 是在实践中被证明通过应用与1,000,000,000+安装

    • 具有交付线程、订阅者优先级等高级功能。

    开源地址:

    https://github.com/greenrobot/EventBus

    4.Java 设计模式 java-design-patterns

    star:71.4k;fork:22.2k

    16165b90ba68134f54bfe9549f64e4b3.png

    设计模式是程序员在设计应用程序或系统时解决常见问题的最佳实践,重用设计模式有助于防止可能导致重大问题的细微问题,同时熟悉模式的程序员和架构师的代码也更具可读性。

    开源地址:

    https://github.com/iluwatar/java-design-patterns

    参考

    https://www.jianshu.com/p/2614fdb5d1c3

    https://www.jianshu.com/p/6e49aa5182f0

    https://walterzhaojr.github.io/

    https://www.zhihu.com/question/26415445

    https://www.zhihu.com/question/19637879

     最后 

    想学习开源的同学,欢迎加入极客星球,让我们一起来学习开源项目,提高自己。

    详细参考:极客星球

    - END -


    看完一键三连在看转发,点赞

    是对文章最大的赞赏,极客重生感谢你c3336b6be2a3505208a9779f50088635.png

    推荐阅读

    5550c3a76c3fc3f6d48c1a6d4547d4ac.png

    如何掌握和精通一门技术


    76a478b2441d7e8912cf1e9f0d3bb76b.png

    深入理解虚拟化

    009ecedea60fbd9f64e525b6d0bcaa48.png

    云计算学习路线和经典资料推荐

    258bef13e3db8f278082c72c1ce851be.png

      求点赞,在看,分享三连dda514069d95b753a3d014e300267f31.png

    展开全文
  • nodeJs开源app后台开源框架集合

    千次阅读 2016-10-06 17:37:14
    1、Horizon ... ... ...Horizon是一个用JavaScript开发的开源实时应用程序后台。...使用一个简单的JavaScript API快速构建和部署Web或移动应用程序,将您的应用程序扩展到数以百万计的用户而没有任何后端代码。 由rethink

    1、Horizon

    项目地址:https://github.com/rethinkdb/horizon


    网站主页:https://horizon.io/

    Horizon是一个用JavaScript开发的开源实时应用程序后台。
    使用一个简单的JavaScript API快速构建和部署Web或移动应用程序,将您的应用程序扩展到数以百万计的用户而没有任何后端代码。
    由rethinkdb团队和开源社区的贡献保驾护航,让你以闪电般的速度建立复杂的应用程序。

    Horizon is built on top of RethinkDB and consists of four components:

    • Horizon server -- a middleware server that connects to/is built on top of RethinkDB, and exposes a simple API/protocol to front-end applications.
    • Horizon client library -- a JavaScript client library that wraps Horizon server's protocol in a convenient API for front-end developers.
    • Horizon CLI - hz -- a command-line tool aiding in scaffolding, development, and deployment
    • GraphQL support -- the server will have a GraphQL adapter so anyone can get started building React/Relay apps without writing any backend code at the beginning. This will not ship in v1, but we'll follow up with a GraphQL adapter quickly after launch.

    Horizon currently has all the following services available to developers:

    • :white_check_mark: Subscribe -- a streaming API for building realtime apps directly from the browser without writing any backend code.
    • :white_check_mark: Auth -- an authentication API that connects to common auth providers (e.g. Facebook, Google, GitHub).
    • :white_check_mark: Identity -- an API for listing and manipulating user accounts.
    • :white_check_mark: Permissions -- a security model that allows the developer to protect data from unauthorized access.

    Upcoming versions of Horizon will likely expose the following additional services:

    • Session management -- manage browser session and session information.
    • Geolocation -- an API that makes it very easy to build location-aware apps.
    • Presence -- an API for detecting presence information for a given user and sharing it with others.
    • Plugins -- a system for extending Horizon with user-defined services in a consistent, discoverable way.
    • Backend -- an API/protocol to integrate custom backend code with Horizon server/client-libraries.

    展开全文
  • 概述 Uncode是基于Java 语言的一系列开源后端开发组...
  • 大家也可以用各种其他的后端服务引擎,如HP、星光、e2ee(未探讨是否可以)、易语言的服务组件、iis等等 源码里除了有后端脚本引擎,还增加了一个测试版的js库,名为ppw.js,ppwjs目的是让html源码里的js支持中文,...
  • 在实际项目中使用的:初始化一些配置参数,集成其他开源项目组件,自己编写的组件等。 AOP:很少直接使用,但是spring里面的声明性事务就是使用这个方式实现的。 声明性事务:一般来说,j2ee系统中,有dao层,...
  • 它需要连接到后端存储服务器。 Acralyzer的默认存储终结点是 。 Acralyzer和acra-storage都是 。 CouchApps是由HTML / Javascript文件组成的Web应用程序,直接由。 Acralyzer使用其他开源软件: d3.js jQuery...
  • 大家也可以用各种其他的后端服务引擎,如HP、星光、e2ee(未探讨是否可以)、易语言的服务组件、iis等等 源码里除了有后端脚本引擎,还增加了一个测试版的js库,名为ppw.js,ppwjs目的是让html源码里的js支持中文,...
  • 大家也可以用各种其他的后端服务引擎,如HP、星光、e2ee(未探讨是否可以)、易语言的服务组件、iis等等。源码里除了有后端脚本引擎,还增加了一个测试版的js库,名为ppw.js,ppwjs目的是让html源码里的js支持中文,...
  • 目的:对学到的JavaEE框架、开源组件、前端技术进行应用学习。同时开发完成后写技术博客,开源到Github上 开源 前端是采用一个个人网站分享的前端模板,感谢作者 【技术介绍】 JavaEE后端技术: JPA产品:Hibernate ...
  • Java通用后台组件化开发框架

    千次阅读 2020-07-18 20:52:22
    一款 Java 语言基于 SpringBoot2.x、Layui、Thymeleaf、MybatisPlus、Shiro、...自研了一套个性化的组件,实现了可插拔的组件式开发方式:单图上传、多图上传、下拉选择、开关按钮、单选按钮、多选按钮、图片裁剪等
  • 近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。 组件基本信息 组件:cellnet ...
  • CARTA图像查看器(后端) 简单的基于Web的界面的后端过程,用于查看CASA,FITS,MIRIAD和HDF5格式的射电天文图像(使用针对HDF5的IDIA自定义架构)。 与在后端上渲染图像并将渲染的图像发送到前端客户端的常规方法...
  • 前端采用VueJS、后端基于ThinkPHP5.1开发(根据后端API返回的JSON数据结构,也可使用Java、Python、C#等语言开发后端API),界面使用的是iview UI组件库。可用于快速开发CMS、CRM、WMS、OMS、ERP等功能强大的后台管理...
  • 知名网络后端开源软件集合

    千次阅读 2016-01-25 16:28:00
    网络后端组件:负载均衡、持久化、内存缓存、逆向代理、防火墙、消息队列、分布式文件系统、系统资源采集系统和图标展示系统、可用性、一致性、web开发框架、web性能压测、分布式计算、     文档工具:Spinx   ...
  • Spam Board是用PHP编写并使用SQL数据库作为后端的论坛软件(如果您更喜欢该术语,则为公告板)。 Wiki引擎是可选的附加组件
  • b、后端维护枚举值,前端不维护,查询时后端接口根据编码进行映射返回对应字段。 按照前后端分离项目实施过程中“重后端轻前端”的思想来看 b 方案显的更为合理。 前端代码更轻,后端也不用关注前端维护的枚举
  • java后端源码部署 kkFileViewOfficeEdit 对 进行了二次开发。整合了openOffice进来,项目体积更大了!但使用和配置更简单,只需要配置redis即可 码云: 文件在线预览使用方法 IP+端口+项目名/onlinePreview?url=你的...
  • 最终用户客户端 UI 前端和服务器后端,用于实现 vp 在线 COM 游戏组件
  • Horizo​​n是用于构建复杂的实时应用程序的开源开发人员平台。 它提供了一个完整的后端,可大大简化构建,部署,管理和扩展引人入胜JavaScript Web和移动应用程序的过程。 Horizo​​n是可扩展的,与Node.js堆栈...
  • hugegraph是一个速度快、可扩展性强的图形数据库。由于hugegraph具有出色的oltp能力,可以方便地将数十亿个顶点和边存储到hugegraph中并从中查询。作为对apache tinkerpop 3框架的遵从,可以通过gremlin(一种强大的...
  • 是一个将非营利组织和开源开发人员与技术志愿者联系起来的全球平台。 该应用程序使用以下架构构建: 前端:Angular 2、CSS、HTML 后端:Java Spring 框架 数据库:MySQL 我们欢迎技术志愿者帮助建立这个平台。 接触...
  • VCL.JS是TypeScript开源平台,可用于在短时间内构建企业Web应用程序的过程,无论您是专家开发人员还是刚刚起步的人。 有关更多信息,请参见http://vcljs.com友好的API可帮助您更快地完成工作。 //绑定到查询的简单...
  • 使用此附加组件,您可以轻松地在后端或通过URL将压缩的附加组件或插件上传到ZIP文件。 用 该插件在安装程序中注册了两个新的子页面(“上传自己的页面”旁边)。 在那里你可以 上载有效附件的ZIP文件(将被选中)。 ...
  • 近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。 组件基本信息 组件:terraform...
  • [其他类别]烁空ASP.Net全能数据库组件 v2.1 开源版_dll21.zip源码ASP.NET网站源码打包下载[其他类别]烁空ASP.Net全能数据库组件 v2.1 开源版_dll21.zip源码ASP.NET网站源码打包下载[其他类别]烁空ASP.Net全能数据库...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,732
精华内容 26,292
关键字:

后端开源组件