Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

README.md

Back End Technology

Node (deno) Go Python Java
Multi-Threads ✔️ ✔️ ✔️ ✔️
When to use

Architecture knowledge

architect-awesome Full Stack Interview Questions & Answers

Node


Node Article
node 技巧 NodeJs 静态服务器
Reference Reference
Node.js 包教不包会 七天学会 NodeJS
从零开始 nodejs 系列文章 Node 入门
Node 初学者入门,一本全面的 NodeJS 教程

Koa

next generation web framework for node.js Koa

koa middleware

Go language


Article Article
Go Books
awesome-go
Go kit

Article Article
awesome-python
Web 框架 Django Django rest framework
django-debug-toolbar django db optimization
Flask
Full Stack Python microservices
Pika RabbitMQ
Green python Color, also for Djnago Test

Celery is a task queue with focus on real-time processing, while also supporting task scheduling.

Why we need Task Queue in Web Context?

These are some common use cases:

  • Running something in the background. For example, to finish the web request as soon as possible, then update the users page incrementally. This gives the user the impression of good performance and “snappiness”, even though the real work might actually take some time.
  • Running something after the web request has finished.
  • Making sure something is done, by executing it asynchronously and using retries.
  • Scheduling periodic work.
tool
virtualenv

Java


spring cloud

Java Spring

Spring boot 优缺点

Netlfix Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers

spring cloud netflix Service Discovery (Eureka), Circuit Breaker (Hystrix), Intelligent Routing (Zuul) and Client Side Load Balancing (Ribbon)

DTO VO POJO JavaBean

Sample Rest.js and Spring Data REST

Playframework is based on a lightweight, stateless, web-friendly architecture |tool| Maven is a tool that can now be used for building and managing any Java-based project. Google guava is a set of core libraries that includes new collection types (such as multimap and multiset), immutable collections, a graph library, functional types, an in-memory cache, and APIs/utilities for concurrency, I/O, hashing, primitives, reflection, string processing, and much more!

Netlfix Hystrix 限流熔断,

Alibaba Java Coding Guidelines pmd implements and IDE plugin

Learning Java Spring Framework Transaction Management 分布式事务 TCC(Try-Confirm-Cancel) Transaction

Spring boot admin, Admin UI for administration of spring boot applications

Spring Event Example

RESTful API

Best practies for a pragmatic RESTful API

HTTP API Design

OpenAPI

RESTful API design

RESTful API introductions

HATEOAS ( Hypermedia as Engine of Application State)

Microsoft RESTful API guidelines

API Style book

REST Resource Naming Guide

API Design Tool

  1. Swagger Editor
  2. Swagger Codegen

Standard JSON API response format ?

Google JSON Style Guide

Authentication & authorization

SAML SAML Security Assertion Markup Language is an open standard that allows identity providers (IdP) to pass authorization credentials to service providers (SP).

OAuth OAuth 2 OAuth2 single page application

SSO how does single-sign-on work

Spring Security OAuth2 SSO

CAS (Central Authentication Service)

CAS SSO CAS Install tutorial video CAS War Overlayer

Basic

tokn

JWT(JSON Web Token) https://jwt.io/

OpenID https://openid.net

Spring Security Domain Object Security (ACLs) https://www.concretepage.com/spring/spring-security/

LDAP OpenLDAP LDAP is often used by organizations as a central repository for user information and as an authentication service. It can also be used to store the role information for application users.

IAM (identity and access management) all forms of access control can ultimately be mapped back to one of four classic models:

  • Discretionary Access Control (DAC),
  • Mandatory Access Control (MAC),
  • Role-based Access Control (RBAC),
  • Attribute-based Access Control (ABAC)

http://blog.identityautomation.com/rbac-vs-abac-access-control-models-iam-explained

Article
Four Authentication & authorization
Entity-level access restriction in the microservice architecture based on user or group membership
OpenSource
Keycloak an open source Identity and Access Management solution
An OpenID Connect reference implementation in Java on the Spring platform

OAuth2 good and bad

OAuth2 vs OpenID Connect vs SAML

authentication-and-authorization-in-microservices

Lua

kong基于 OpenResty 的 API 网关服务和网关服务管理层. Kong dashboard

Microservices Architecture 微服务

Tools for Microservices

名称 说明
API Fortress API 测试和健康检测工具,为企业级 API 提供自动化的功能测试、健康检测和负载测试。它的设计原则是无代码,完全基于现代 API 架构实践和模式而构建 收费
Graylog Security Incident and Event Management Report
Istio 它支持在 Kubernetes 上进行服务部署,其服务网格技术为微服务通信带来了可靠性、安全性和可管理性。其中,服务网格技术可以用于改善应用程序和微服务之间的关系和交互。开源
Conductor Netflix 的微服务编排引擎,是 Netflix OSS 生态系统的一部分。它可以运行在云端,并实现了微服务的流程编配。它还能够用于控制和可视化微服务之间的交互。
Seneca 开发人员可以使用 Seneca,来轻松构建基于消息的微服务,它是 Node.js 的微服务工具包,可以用它写出干净而且结构良好的代码,并系统化应用程序的业务逻辑。
Elixir Elixir is a dynamic, functional language designed for building scalable and maintainable applications.

PiggyMetrics This is a proof-of-concept application, which demonstrates Microservice Architecture Pattern using Spring Boot, Spring Cloud and Docker. With a pretty neat user interface, by the way.

Staffjoy V2

Event Sourcing and CQRS(Command and Query Responsibilty Segregation)

Nacos It provides a set of simple and useful features enabling you to realize dynamic service discovery, service configuration, service metadata and traffic management.

The factors represent a set of guidelines or best practices for portable, resilient applications that will thrive in cloud environments(specifically software as a service applications)

  1. There should be a one-to-one association between a versioned codebase (for example,an IT repository) and a deployed service. The same codebase is used for many deployments.
  2. Services should explicitly declare all dependencies, and should not rely on the presence of system-level tools or libraries.
  3. Configuration that varies between deployment environments should be stored in the environment (specifically in environment variables).
  4. All backing services are treated as attached resources, which are managed (attached and detached) by the execution environment.
  5. The delivery pipeline should have strictly separate stages: Build, release, and run.
  6. Applications should be deployed as one or more stateless processes. Specifically, transient processes must be stateless and share nothing. Persisted data should be stored in an appropriate backing service.
  7. Self-contained services should make themselves available to other services by listening on a specified port.
  8. Concurrency is achieved by scaling individual processes (horizontal scaling).
  9. Processes must be disposable: Fast startup and graceful shutdown behaviors lead to a more robust and resilient system.
  10. All environments, from local development to production, should be as similar as possible.
  11. Applications should produce logs as event streams (for example, writing to stdout and stderr), and trust the execution environment to aggregate streams.
  12. If admin tasks are needed, they should be kept in source control and packaged alongside the application to ensure that it is run with the same environment as the application.

Load/Stree Test

Load/Stress Test
ab - Apache HTTP server benchmarking tool
Apache JMeter
Siege
FunkLoad
loader.io
Gatling
wrk, Modern HTTP benchmarking tool

Theory fo distributed system

Soft

Database

Oracle Postgresql Mysql SQLite
Introduction A very powerful, embedded relational database management system
Relational Database ✔️ ✔️ ✔️ ✔️
Advantage An open-source SQL standard compliant RDBMS,Strong community,Strong third-party support,Extensible,Objective Easy to work,Feature rich,Secure, Scalabel, Speedy File based, Standards-aware
Disadvantage Performance,Hosting Function limitations, Reliability issues, Stagnated development No user management, Lack of possibility to tinker with for additional performance
When to use Data Integrity, Complex custom procedures,Integration,complex design Distributed operations, Hight security,Web site or Web app, Custom solution Embedded app, Disk access replacement, Testing
When not to use Speed,Simple set ups,Replication SQL Compliance, Concurrency, Full-text search Multi-User App, High write volumes
postgresql
postgresql
pgAdmin GUI for Postgresql
[postgresql index]](https://github.com/digoal/blog/blob/master/201706/20170627_01.md)

mysql

MySQL
MySQL8.0 new feature 支持文档存储

ArangoDB

Greenplum an open-source massively parallel data platform for analytics, machine learning and AI

reference: [1]https://www.digitalocean.com/community/tutorials/sqlite-vs-mysql-vs-postgresql-a-comparison-of-relational-database-management-systems

Database migrations / version

flyway

liquibase

https://stackoverflow.com/questions/115369/do-you-use-source-control-for-your-database-items?page=1&tab=votes#tab-top

Apache Ignite

Persistence Framework

MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis Web Example

Hibernate ORM

Caching

Memcached VS Redis

System Properties Comparison Memcached vs. Redis

Redis is better than Memcache

Redis 中文网

缓存设计的要点 1.缓存穿透,避免缓存穿透 2.缓存雪崩,加锁或者后台更新 3.缓存热点,备份 多副本

Desgin Pattern 23 种设计模式

创建型

  • Abstract Factory 抽象工厂, 提供一个接口,可以创建一系列相关或相互依赖的对象,而无须指定它们具体的类
  • Builder 构建器,将一个复杂类的构建与其表示相分离,使得相同的构件过程能够得出不同的表示
  • Factory Method 工厂方法,定义一个建对象的接口,但由子类决定需要实例化哪一个类,工厂方法使得子类实例化的过程推迟
  • Prototype 原型,用原型实例指定创建对象的类型,并且通过复制这个原型来创建新的对象
  • Singleton 单例,保证一个类只有一个实例,并提供一个访问它的全局点

结构型

  • Adapter 适配器,将一个类的接口转换成用户希望的另一个接口,使原本不相兼容的接口得以协同工作
  • Bridge 桥接,将类的抽象部分和它的实现部分分离开来,使得它们可以独立地变化
  • Composite 组合,将对象组合成树型结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性
  • Decorator 装饰器,动态地给一个对象添加一些额外的功能,它提供了子类扩展功能的一个灵活的替代,比派生一个子类更加灵活
  • Facade 外观模式,定义一个高层次接口,为子系统中的一组接口提供一个一致的外观,从而简化了该子系统的使用
  • Flyweight 享元模式,提供支持大量细粒度对象共享的有效方法
  • Proxy 代理,为其他对象提供一种代理以控制这个对象的访问

行为模式

  • Chain of Responsiblity 责任链,通过给多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合。将接收对象链接起来,在链中传递请求,直到有一个对象处理这个请求
  • Command 命令,将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销操作
  • Iterpreter 解释器,给定一种语言,定义它的文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子
  • Iterator 迭代器,提供一种方法来顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示
  • Mediator 中介者,用一个中介对象来封装一系列的对象交互。它使各对象不需要显示地相互调用,从而达到低耦合,还可以独立地改变对象建的交互
  • Memento 备忘录,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以在以后将该对象恢复到原先保存的状态
  • Observer 观察者,定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动更新
  • State 状态,允许一个对象在其内部状态改变时改变它的行为
  • Strategy 策略,定义一系列算法,把它们一个个封装起来,并且使它们之间可互相替换,从而让算法可以独立于使用它的用户而变化
  • Template Method 模板方法,定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义算法的某些特定步骤
  • Visitor 访问者,表示一个作用于某对象结构中的各元素的操作,使得在不改变各元素的类的前提下定义作用于这些元素的新操作

FMEA(Failure mode and effects analysis) 故障模式与影响分析

又称失效模式与后果分析、失效模式与效应分析、故障模式与后果分析等。

  1. 找出产品或过程中潜在的故障模式
  2. 根据相应的评价体系对找出的潜在故障模式进行风险量化评估
  3. 列出故障的起因/机理,寻找预防或改进措施

Search

ElasticSearch https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html

Apache Solr

Sphinx

Apache lucene

Netty

https://mp.weixin.qq.com/s/FUHnDFiHWeJC1J6-jAh9mA

File System/Server

Based On HBase

Small File Server

淘宝 TFS、京东 JFS、Facebook 的 Haystack

Client Written in License Access API
Ceph C++ LGPL librados (C, C++, Python, Ruby), S3, Swift, FUSE
BeeGFS C / C++ FRAUNHOFER FS (FhGFS) EULA,[1] GPLv2 client POSIX
GlusterFS C GPLv3 libglusterfs, FUSE, NFS, SMB, Swift, libgfapi
MooseFS C GPLv2 POSIX, FUSE
Quantcast File System C Apache License 2.0 C++ client, FUSE (C++ server: MetaServer and ChunkServer are both in C++)
Spectrum Scale (GPFS) C, C++ Proprietary POSIX, NFS, SMB, Swift
Lustre C GPLv2 POSIX, liblustre, FUSE
MapR-FS C, C++ Proprietary POSIX, NFS, FUSE, S3
OpenAFS C IBM Public License Virtual file system, Installable File System
scality C Proprietary fuse, NFS file system, rest, AWS S3
Tahoe-LAFS Python GNU GPL 2+ and other[5] HTTP (browser or CLI), SFTP, FTP, FUSE via SSHFS, pyfilesystem
HDFS Java Apache License 2.0 Java and C client, HTTP
XtreemFS Java, C++ BSD License libxtreemfs (Java, C++), FUSE
Ori[6] C, C++ MIT libori, FUSE

reference Wiki

HDFS vs Ceph vs GlusterFS

FS

http://iopscience.iop.org/article/10.1088/1742-6596/513/4/042014/pdf

MooseFS 适合大中文件

NAS, SAN, NFS, 块存储、文件存储、对象存储

MinIO A high performance, distributed object storage server, designed for large-scale data infrastructure. It is an ideal S3-compatible replacement for Hadoop HDFS for machine learning and other big data workloads

Network

Wireshark is the world’s foremost and widely-used network protocol analyzer.

RawCap is a free command line network sniffer for Windows that uses raw sockets.

C10K Problem C10K Problem翻译 http://highscalability.com/blog/2013/5/13/the-secret-to-10-million-concurrent-connections-the-kernel-i.html

Middleware/中间件

Nginx is an open source web server and reverse proxy Load_balancing (http://nginx.org/en/docs/http/load_balancing.html)

kong基于 OpenResty 的 API 网关服务和网关服务管理层.

Netflix Eureka 深度剖析服务注册与发现原理

Prometheus Power your metrics and alerting with a leading open-source monitoring solution Learning Prometheus

OpenResty full-fledged web platform that integrates our enhanced version of the Nginx core, our enhanced version of LuaJIT, many carefully written Lua libraries, lots of high quality 3rd-party Nginx modules, and most of their external dependencies. It is designed to help developers easily build scalable web applications, web services, and dynamic web gateways.

Tyk Open Source API Gateway written in Go

Distributed database middleware, is an open-source ecosphere consists of a set of distributed database middleware solutions, including 3 independent products, Sharding-JDBC, Sharding-Proxy & Sharding-Sidecar (todo)

https://shardingsphere.apache.org/document/current/en/overview/

Logging Management

SLF4J

Logback

ELK(Elasticsearch Logstash Kibana) a Centralized Logging stack.

fluentd Open-Source Log Collector

a better conceptual model is to treat logs as time-ordered streams: there is no beginning or end, but rather an ongoing, collated collection of events which we may wish to view in realtime as they happen (e.g. via tail -f or heroku logs --tail) or which we may wish to search in some time window (e.g. via grep or Splunk). fluentd Docker

IoT (Interet of Thing)

MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol

scheduled task

Elastic-Job is a distributed scheduled job framework, based on Quartz and Zookeeper.

A lightweight distributed task scheduling framework.(分布式任务调度平台XXL-JOB)

Netflix Conductor is a microservices orchestration engine

Zeebe is a workflow engine for microservices orchestration.

Workflow

BPMN, Business Process Model and Notation Flowable (deprecated) Activiti, after 6.0 it was not development

Parser Generator

ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files Grammars written for ANTLR v4; expectation that the grammars are free of actions.