- Introduction
- Algorithms and Data Structure
- Languages
- CVS
- Databases
- IDE
- Frameworks
- Observability
- Microservices
- Service communications
- Balancer
- Continuous Integration
- Architecture
- Responsibilities
- Methodology of Development
Here is my knowledge for backend software developer. Please use it.
Language of development in the most starting point of software development. There are huge number of languages. They have different properties like syntax, on which operation system it works, or on which hardware it works.
It's one of the most popular languages for software development. The most rival feature is build once then run anywhere. Java compiler creates byte code from source code. This byte code looks like machine code, i.e. instructions for the processors, but there are no physical processor, in runs on Java Virtual Machine, that exists for almost any popular Operation System(Windows, Linux).
Other things that make it's so popular - the huge number of libraries and technologies with java could be used.
- git
- svn
In order to store files you could use files, think about format, solve issues with multiple using. And other things, but it's better to use ready for this products for storing - databases. It's considered that NoSQL databases could be horizontally scaled, SQL only vertically.
- redis
- memcache
- mongodb
- cassandra
- neo4j
- elastic
- solr
Integrated development environment is software that gives you possibility to write code easily. Literally they help you to do it.
- Spring, beans, DI/IC
- SLO/SLI/SLA
- latency/throughput
- opentracing jaeger
- monitoring
- grafana
- kibana
- you need good reason to use microservices
- in monolith hard to establish borders between components, all the teams work in should use the same libraries
- by microservices you could split on independent supported by separate teams
Lightweight version of virtual machine, but it doesn't. It works at first on linux, on windows it just started to be implemented. Main idea it uses core of the linux, because it's stable enough and create isolate environment from other processes.
Orchestration for a lot of services. Uses pods as minimal thing. On Pods could be several container, but usually one. Type of services:
- Stateful
- Stateless
Red Had implementation that uses Kubernetes under the hood. It includes UI, aggregated command line, images stores and other features.
Proxy as a library. Hard to implement because for each different language required their own library. But fastest.
Proxy that started near service, e.g. on the same pod. Service sends request to sidecard proxy, then proxy reroute it.
Sidecar proxy written on C++. Supports http, http2, grpc, databases connections. Could also be used as edge proxy.
Control for traffic, secure, rules, circuit braking.
Proxy before service mesh, something like reverse proxy.
uses two main things:
- protobuf
- http/2
Protobuf is way for describe api. http2 use the same channel for bidirectional requests.
built in features:
- timeouts, you could always set timeouts in the request
In order to spread workload more equally between services balancer could be used
- ssl, tls, ...
In general balancer could be divided in two groups: L4 and L7, which connected to the level of OSI model where they used.
L4 on the transport layer, i.e. TCP level. Mostly such balancer are hardware. It doesn't know anything of context of traffic it knows only source and destination, but there are features like ssl that hardly could be fit only in L4 model.
L7 balance relies on application layer so, they could decide balancing strategy based on the traffic.
If you want to hide client from server you use proxy.
If you want to hide server from client, you use reverse proxy. In some situation reverse proxy could be general case for balancer.
OSI(Open Systems Interconnection Model) conceptual model that shows the levels of system interaction.
Helps to automate building
- architecture, provides pros and cons
- writing info about features, discussion on it
- understand domain
- communications
- Confluence
- Bugtracking - jira
- plantUML
- Agile
- Waterfall