From 934357fd8f9caebf55e198eff07263275ff93db5 Mon Sep 17 00:00:00 2001 From: Junv Date: Tue, 2 Jul 2019 17:28:53 +1000 Subject: [PATCH 01/23] Update go.md --- categories/go.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/categories/go.md b/categories/go.md index 0c27964..a0d788f 100644 --- a/categories/go.md +++ b/categories/go.md @@ -245,3 +245,6 @@ REPL stands for read eval print loop, basically it just like the irb in Ruby. Wiki: * gore + +# Useful links +* [Go best practice](https://github.com/golang/go/wiki/CodeReviewComments) From 977a6ed98007b9ced5577f641921d153ed279724 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Wed, 17 Jul 2019 16:45:56 +1000 Subject: [PATCH 02/23] Add postgres trigger --- categories/database.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/categories/database.md b/categories/database.md index 55069c7..bffd8f6 100644 --- a/categories/database.md +++ b/categories/database.md @@ -32,6 +32,41 @@ - will impacted by time zone - index by timestamp will be faster than datetime due to 4 bytes. +## Postgres trigger example + +Giving we have a table called users, and the columns are: +```bash +id name age +1 tom 10 +2 Dave 17 +``` +there is a requirement which is when some user's age turn to `18` move that person to `adults` table. +The adults table have the same fields with `users`. + +The potential trigger implementation can be + +```sql + +CREATE OR REPLACE FUNCTION to_adults () + RETURNS TRIGGER + AS $$ +BEGIN + INSERT INTO adults VALUES (new.*); + DELETE FROM users WHERE age >= 18; + RETURN NEW; +END; +$$ +LANGUAGE plpgsql; + +CREATE TRIGGER to_adults_trigger + AFTER UPDATE ON users + FOR EACH ROW + WHEN (NEW.age >= 18) + EXECUTE PROCEDURE to_adults(); +``` + + + ## SQL join diagram ![sql join diagram](https://raw.githubusercontent.com/wahyd4/knowledge-mind-mapping/master/Knowledge.mindnode/resources/FC67BE77-F837-4207-B3C4-45205F7C9C40.png) From 907d93388e718b1eb4d57603e1a6698715977e50 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Mon, 16 Sep 2019 17:09:35 +1000 Subject: [PATCH 03/23] Add some more linux commands. e.g. mount --- categories/devops/linux.md | 48 +++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/categories/devops/linux.md b/categories/devops/linux.md index a17c124..247d1e4 100644 --- a/categories/devops/linux.md +++ b/categories/devops/linux.md @@ -105,17 +105,59 @@ scp your_username@remotehost.edu:foobar.txt /local/dir scp /path/to/local/file user@server:/path/to/remote/file ``` -## Curl +### Merge video files into one -Curl is a very popular and powerful HTTP client, there is also another very good tool called `httpie` writen in Python which is even eaiser to use. +```bash +ffmpeg -f concat -safe 0 -i ./files.txt -c copy output.mp4 +``` + +In the `files.txt` you should list all the video clips like the following + +```txt +file 1.flv +file 2.flv +file 3.flv +``` + + +### Curl + +Curl is a very popular and powerful HTTP client, there is also another very good tool called `httpie` written in Python which is even eaiser to use. The following are some useful commands: -### Post file +#### Post request with file ```bash curl --data "@$(pwd)/fixure/sample.json" --user "foo:bar" localhost:8080/api/abc ``` +### Mount + +#### Mount NFS(Network file system) to local + +```bash + +mkdir /to-local-folder +# mount +mount -t nfs -O user=abc,pass=pass 192.168.1.2:/nfs-folder /to-local-folder + +# remount +mount -o remount /to-local-folder +``` + +#### Mount folder permanently + +In the example above, the mounted folder will lost the connection when you restart your system, in order to permanently mount the folder, you will need to edit `/etc/fstab` by adding one more line + +``` +192.168.1.2:/nfs-folder /to-local-folder nfs defaults 0 0 +``` +You can specify more options + +``` +192.168.0.216:/nfs-folder /to-local-folder nfs defaults,proto=tcp,port=2049 0 0 +``` + ## Package manager * [snap](https://snapcraft.io/) From c6dacbee6f6eb9aa87ae18d0c1b6135bc7622b9c Mon Sep 17 00:00:00 2001 From: Junv Date: Sat, 12 Oct 2019 16:20:58 +1100 Subject: [PATCH 04/23] Update go.md --- categories/go.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/categories/go.md b/categories/go.md index a0d788f..c0f7ee8 100644 --- a/categories/go.md +++ b/categories/go.md @@ -27,11 +27,12 @@ new(T) -> *T Array has a exactly length, can't be modified. ## slice -- Auto increment length +1. Auto increment length ```go new([]int) make([]int, 2, 5) ``` +2. nil is a valid slice which length is `0` ## Go routine From 8f02783cdf60b300fef73ce4c6a6e922d74ac126 Mon Sep 17 00:00:00 2001 From: Junv Date: Sat, 12 Oct 2019 16:41:26 +1100 Subject: [PATCH 05/23] Update go.md --- categories/go.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/categories/go.md b/categories/go.md index c0f7ee8..1093c51 100644 --- a/categories/go.md +++ b/categories/go.md @@ -1,4 +1,4 @@ -# Language +# Go ## pass pointer or value - value: Variable must not be modified @@ -20,13 +20,16 @@ new(T) -> *T ## array ```go -[]string -[]string{"a", "b"} -[...]string{"a","b"} +var a [1]int ``` Array has a exactly length, can't be modified. ## slice +```go +var a []string +[]string{"a", "b"} +[...]string{"a","b"} +``` 1. Auto increment length ```go new([]int) From 5efc3a73b7c536fda1e92df48f9277c89b75bc33 Mon Sep 17 00:00:00 2001 From: Junv Date: Sat, 12 Oct 2019 16:42:53 +1100 Subject: [PATCH 06/23] Update go.md --- categories/go.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/categories/go.md b/categories/go.md index 1093c51..bc5e6e7 100644 --- a/categories/go.md +++ b/categories/go.md @@ -252,3 +252,5 @@ Wiki: # Useful links * [Go best practice](https://github.com/golang/go/wiki/CodeReviewComments) +* [Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments) +* [Uber Go code style](https://github.com/uber-go/guide/blob/master/style.md#pointers-to-interfaces) From a61260079ff9521196cd0bb6ddff76f935973113 Mon Sep 17 00:00:00 2001 From: Junv Date: Sat, 12 Oct 2019 16:50:15 +1100 Subject: [PATCH 07/23] Update go.md --- categories/go.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/categories/go.md b/categories/go.md index bc5e6e7..b0cba70 100644 --- a/categories/go.md +++ b/categories/go.md @@ -87,6 +87,23 @@ m.Store("a", "b") value, ok := m.Load("a") ``` +### Defer to Clean Up + +Use defer to clean up resources such as files and locks. +```go +p.Lock() +defer p.Unlock() + +if p.count < 10 { + return p.count +} + +p.count++ +return p.count + +// more readable +``` + # Frameworks ## db @@ -112,6 +129,8 @@ value, ok := m.Load("a") - test - Testify - Ginkgo +- Linter + - Golangci-lint https://github.com/golangci/golangci-lint # Tips @@ -124,7 +143,7 @@ value, ok := m.Load("a") ## map * implement by hash table -* slice can't be the key of a map, but sized array could. `var a map[[2]int]string` +* slice can't be the key of a map, but sized array could. e.g. `var a map[[2]int]string` ## Go has no generics From 3acfa953b03ebfbc259fcf52ad9c13a964ccfd1a Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Wed, 23 Oct 2019 16:31:27 +1100 Subject: [PATCH 08/23] update go parts --- categories/go.md | 52 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/categories/go.md b/categories/go.md index b0cba70..78a8cff 100644 --- a/categories/go.md +++ b/categories/go.md @@ -35,7 +35,7 @@ var a []string new([]int) make([]int, 2, 5) ``` -2. nil is a valid slice which length is `0` +2. nil is a valid slice which length is `0` ## Go routine @@ -119,21 +119,30 @@ return p.count - go kit - full stack micro service framework like spring boot -## tools +## Tools -- profiler +### profiler - go-wrk(wrk) - a http benchmark tool - go-torch - Stochastic flame graph profiler -- test +### test - Testify - Ginkgo -- Linter - - Golangci-lint https://github.com/golangci/golangci-lint +### Linter + - Golangci-lint https://github.com/golangci/golangci-lint # Tips +## Sort slice + +```go +// sort users by user age ASC +sort.Slice(users, func(i, j int) bool { + return users[i].age < planets[j].age +}) +``` + ## slice - byte* array //actual data @@ -174,14 +183,31 @@ return p.count ## error handling -- error type assertion +### check error type + ```go - if serr, ok := err.(*json.SyntaxError); ok {} +ErrorSample := errors.New("some error") +if errors.Is(err, ErrorSample) { + // something wasn't found +} ``` -- better error handling +### error type assertion +```go + if serr, ok := err.(*json.SyntaxError); ok {} +//or + +// var e *QueryError +if errors.As(err, &e) { + // err is a *QueryError, and e is set to the error's value +} + +``` + +### better error handling + +#### custom error type - - custom error type ```go type appError struct { Error error @@ -189,11 +215,13 @@ type appError struct { Code int } ``` - - concat error check +#### concat error check + ```go if err1() != nil || err2() != nil {} ``` - - some error constants +#### some error constants + ```go errNotFound = errors.New("Item not found") switch err { From c2f85b2b220201f3cca32af116038a598f7e9cf0 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Wed, 27 Nov 2019 16:14:54 +1100 Subject: [PATCH 09/23] Add knowledge about circuit breaker --- assets/images/circuitbreaker.png | Bin 0 -> 30897 bytes categories/software-design.md | 28 +++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 assets/images/circuitbreaker.png diff --git a/assets/images/circuitbreaker.png b/assets/images/circuitbreaker.png new file mode 100644 index 0000000000000000000000000000000000000000..e9bc103d0f20e99992c2d0ebfa18648b9f6ec2c0 GIT binary patch literal 30897 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 literal 0 HcmV?d00001 diff --git a/categories/software-design.md b/categories/software-design.md index 23dbe56..b6bb513 100644 --- a/categories/software-design.md +++ b/categories/software-design.md @@ -27,7 +27,7 @@ - Developers must deal with extra complexity of creating a distributed system - Deployment complexity - To deploy different types of services - + ## Service Mesh A service mesh is a way to control how different parts of an application share data with one another. Unlike other systems for managing this communication, a service mesh is a dedicated infrastructure layer built right into an app. This visible infrastructure layer can document how well (or not) different parts of an app interact, so it becomes easier to optimize communication and avoid downtime as an app grows. @@ -37,6 +37,32 @@ A service mesh is a way to control how different parts of an application share d * [Istio](https://istio.io/) * [Consul](https://www.consul.io/) +# CircuitBreaker Design + +## Why we need CircuitBreaker + +In case we have serviceB down, serviceA should still try to recover from this and try to do one of the followings: +- **Custom fallback**: Try to get the same data from some other source. If not possible, use its own cache value. +- **Fail fast**: If serviceA knows that serviceB is down, there is no point waiting for the timeout and consuming its own resources. It should return ASAP “knowing” that serviceB is down +- **Don’t crash**: As we saw in this case, serviceA should not have crashed. +- **Heal automatic**: Periodically check if serviceB is working again. +- **Other APIs should work**: All other APIs should continue to work. + +## What is circuit breaker design? +The idea behind is simple: +- Once serviceA “knows” that serviceB is down, there is no need to make request to serviceB. serviceA should return cached data or timeout error as soon as it can. This is the OPEN state of the circuit +- Once serviceA “knows” that serviceB is up, we can CLOSE the circuit so that request can be made to serviceB again. +- Periodically make fresh calls to serviceB to see if it is successfully returning the result. This state is HALF-OPEN. + +![CircuitBreaker](https://raw.githubusercontent.com/wahyd4/knowledge-mind-mapping/master/assets/images/circuitbreaker.png) + + + +## More links + +- +- + # OOP - Polymorphism From 68e75f731895538d31567406b5685b5dcbd9f30b Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Wed, 27 Nov 2019 16:57:55 +1100 Subject: [PATCH 10/23] Add some basic stuff about gcp --- _sidebar.md | 1 + categories/devops/gcp.md | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 categories/devops/gcp.md diff --git a/_sidebar.md b/_sidebar.md index 912054b..25baa66 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -17,6 +17,7 @@ - [Kubernetes](categories/devops/kubernetes.md) - [Incident Management](categories/devops/incident.md) - [Linux](categories/devops/linux.md) + - [Google Cloud Platform](categories/devops/gcp.md) - [Web](categories/web.md) - [IoT](categories/iot.md) - [Success Team Work](categories/team-work.md) diff --git a/categories/devops/gcp.md b/categories/devops/gcp.md new file mode 100644 index 0000000..73024a2 --- /dev/null +++ b/categories/devops/gcp.md @@ -0,0 +1,27 @@ +# Google Compute Engine + +# Kubernetes Engine + +# Cloud Storage + +# Cloud SQL + +# IAM + +# Stackdriver + +## Logging + +## Log based metrics + +## Debug + +## Trace + +# App Engine + +# Cloud Functions + +# Cloud Run + +Run Containers without caring about infrastructure From 31330f966ed6b401ab3f82e406e272c3aa12e2b8 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Wed, 27 Nov 2019 17:00:50 +1100 Subject: [PATCH 11/23] Create page for aws --- _sidebar.md | 1 + categories/devops/aws.md | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 categories/devops/aws.md diff --git a/_sidebar.md b/_sidebar.md index 25baa66..83ba4d1 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -18,6 +18,7 @@ - [Incident Management](categories/devops/incident.md) - [Linux](categories/devops/linux.md) - [Google Cloud Platform](categories/devops/gcp.md) + - [AWS](categories/devops/aws.md) - [Web](categories/web.md) - [IoT](categories/iot.md) - [Success Team Work](categories/team-work.md) diff --git a/categories/devops/aws.md b/categories/devops/aws.md new file mode 100644 index 0000000..cbc685e --- /dev/null +++ b/categories/devops/aws.md @@ -0,0 +1,6 @@ +# EC2 +Virtual machines + +# ECS + +Running and managing containers without worry about infrastructure From e1d83ba20d82e59a0d92d1ffe994641b122d5bbe Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Mon, 2 Dec 2019 11:07:10 +1100 Subject: [PATCH 12/23] Start adding things to fintech section --- _sidebar.md | 1 + categories/fintech.md | 45 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 categories/fintech.md diff --git a/_sidebar.md b/_sidebar.md index 83ba4d1..1236cef 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -21,6 +21,7 @@ - [AWS](categories/devops/aws.md) - [Web](categories/web.md) - [IoT](categories/iot.md) +- [Fintech](categories/fintech.md) - [Success Team Work](categories/team-work.md) - [Uncategorised](categories/uncategorised.md) - English diff --git a/categories/fintech.md b/categories/fintech.md new file mode 100644 index 0000000..74ec63b --- /dev/null +++ b/categories/fintech.md @@ -0,0 +1,45 @@ +# Fintech(Financial technology) + +## ISO8583 message + +### A example + +``` +02004200040000000002161234567890123456060 +9173030123456789ABC1000123456789012345678 +90123456789012345678901234567890123456789 +0123456789012345678901234567890123456789 +``` +Where: + +``` + 0200 - MTI (Message Type Indicator), + 4200040000000002 - primary bitmap, + 161234567890123456 - field 2, the first 2 digits: 16, is length indicator + 0609173030 - field 7, + 123456789ABC - field 22, + 012345678901234567890123456789012345678901234567890\ + 1234567890123456789012345678901234567890123456789 - field 63. +``` + +### Definition + +ISO8583 message is used in bank or financial institutes card-originated transactions. But sometime, those not card-originated transactions also use ISO8583. + +### Typical Parts + +Typical Fields an ISO8583 message +A typical message might include such fields: +``` +MTI - Message Type Indicator. +Bit 2 - Primary Account Number (PAN) +Bit 3 - Processing Code +Bit 7 - Date and Time of transmission +Bit 11 - Audit Code +Bit 12 - Local time transaction +Bit 13 - Local transaction date +Bit 32 - Identification code of the institution of acquisition +Bit 38 - The authorization code in response +Bit 39 - Response Code +Bit 49 - Currency code of transaction +``` From 1e8e07b5bf8a1081bb93c82e1a6aadc9001cf75a Mon Sep 17 00:00:00 2001 From: Junv Date: Mon, 2 Dec 2019 14:02:45 +1100 Subject: [PATCH 13/23] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..903de5e --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +wiki.toozhao.com \ No newline at end of file From 9f092c457df221543dfa406e79a956414212a1dd Mon Sep 17 00:00:00 2001 From: Junv Date: Mon, 2 Dec 2019 14:04:44 +1100 Subject: [PATCH 14/23] Delete CNAME --- CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 CNAME diff --git a/CNAME b/CNAME deleted file mode 100644 index 903de5e..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -wiki.toozhao.com \ No newline at end of file From 4bef517cf1f76cb29a3a4d3a362de4f095f03bb8 Mon Sep 17 00:00:00 2001 From: Junv Date: Mon, 2 Dec 2019 14:05:03 +1100 Subject: [PATCH 15/23] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..903de5e --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +wiki.toozhao.com \ No newline at end of file From b40ff7c2222b5d6c724d28bbed0b031b97dfe407 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Mon, 2 Dec 2019 14:27:53 +1100 Subject: [PATCH 16/23] Add microservice --- _sidebar.md | 1 + categories/microservice.md | 50 +++++++++++++++++++++++++++++++++ categories/software-design.md | 52 ----------------------------------- 3 files changed, 51 insertions(+), 52 deletions(-) create mode 100644 categories/microservice.md diff --git a/_sidebar.md b/_sidebar.md index 1236cef..ba3164b 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -22,6 +22,7 @@ - [Web](categories/web.md) - [IoT](categories/iot.md) - [Fintech](categories/fintech.md) +- [Microservice](categories/microservice.md) - [Success Team Work](categories/team-work.md) - [Uncategorised](categories/uncategorised.md) - English diff --git a/categories/microservice.md b/categories/microservice.md new file mode 100644 index 0000000..92a88f0 --- /dev/null +++ b/categories/microservice.md @@ -0,0 +1,50 @@ +# Microservice + +- benefits + + - Each application is relatively small + - Easy to scale + - Improved fault isolation + - One service fails won’t influence others + - You can use different stack for each service + - Each service can be deployed independently +- drawbacks + + - Increased memory consumption + - Developers must deal with extra complexity of creating a distributed system + - Deployment complexity + - To deploy different types of services + +## Service Mesh + +A service mesh is a way to control how different parts of an application share data with one another. Unlike other systems for managing this communication, a service mesh is a dedicated infrastructure layer built right into an app. This visible infrastructure layer can document how well (or not) different parts of an app interact, so it becomes easier to optimize communication and avoid downtime as an app grows. + +### Opensource Projects + +* [Istio](https://istio.io/) +* [Consul](https://www.consul.io/) + +# CircuitBreaker Design + +## Why we need CircuitBreaker + +In case we have serviceB down, serviceA should still try to recover from this and try to do one of the followings: +- **Custom fallback**: Try to get the same data from some other source. If not possible, use its own cache value. +- **Fail fast**: If serviceA knows that serviceB is down, there is no point waiting for the timeout and consuming its own resources. It should return ASAP “knowing” that serviceB is down +- **Don’t crash**: As we saw in this case, serviceA should not have crashed. +- **Heal automatic**: Periodically check if serviceB is working again. +- **Other APIs should work**: All other APIs should continue to work. + +## What is circuit breaker design? +The idea behind is simple: +- Once serviceA “knows” that serviceB is down, there is no need to make request to serviceB. serviceA should return cached data or timeout error as soon as it can. This is the OPEN state of the circuit +- Once serviceA “knows” that serviceB is up, we can CLOSE the circuit so that request can be made to serviceB again. +- Periodically make fresh calls to serviceB to see if it is successfully returning the result. This state is HALF-OPEN. + +![CircuitBreaker](https://raw.githubusercontent.com/wahyd4/knowledge-mind-mapping/master/assets/images/circuitbreaker.png) + + +## More links + +- +- diff --git a/categories/software-design.md b/categories/software-design.md index b6bb513..f10c263 100644 --- a/categories/software-design.md +++ b/categories/software-design.md @@ -11,58 +11,6 @@ - temporary variable - coupling -# Microservice - -- benefits - - - Each application is relatively small - - Easy to scale - - Improved fault isolation - - One service fails won’t influence others - - You can use different stack for each service - - Each service can be deployed independently -- drawbacks - - - Increased memory consumption - - Developers must deal with extra complexity of creating a distributed system - - Deployment complexity - - To deploy different types of services - -## Service Mesh - -A service mesh is a way to control how different parts of an application share data with one another. Unlike other systems for managing this communication, a service mesh is a dedicated infrastructure layer built right into an app. This visible infrastructure layer can document how well (or not) different parts of an app interact, so it becomes easier to optimize communication and avoid downtime as an app grows. - -### Opensource Projects - -* [Istio](https://istio.io/) -* [Consul](https://www.consul.io/) - -# CircuitBreaker Design - -## Why we need CircuitBreaker - -In case we have serviceB down, serviceA should still try to recover from this and try to do one of the followings: -- **Custom fallback**: Try to get the same data from some other source. If not possible, use its own cache value. -- **Fail fast**: If serviceA knows that serviceB is down, there is no point waiting for the timeout and consuming its own resources. It should return ASAP “knowing” that serviceB is down -- **Don’t crash**: As we saw in this case, serviceA should not have crashed. -- **Heal automatic**: Periodically check if serviceB is working again. -- **Other APIs should work**: All other APIs should continue to work. - -## What is circuit breaker design? -The idea behind is simple: -- Once serviceA “knows” that serviceB is down, there is no need to make request to serviceB. serviceA should return cached data or timeout error as soon as it can. This is the OPEN state of the circuit -- Once serviceA “knows” that serviceB is up, we can CLOSE the circuit so that request can be made to serviceB again. -- Periodically make fresh calls to serviceB to see if it is successfully returning the result. This state is HALF-OPEN. - -![CircuitBreaker](https://raw.githubusercontent.com/wahyd4/knowledge-mind-mapping/master/assets/images/circuitbreaker.png) - - - -## More links - -- -- - # OOP - Polymorphism From f9301d75574795270f06a3e9b7453eff1df98492 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Mon, 2 Dec 2019 14:31:24 +1100 Subject: [PATCH 17/23] Fix broken links --- categories/devops.md | 2 -- categories/devops/docker.md | 4 ---- 2 files changed, 6 deletions(-) diff --git a/categories/devops.md b/categories/devops.md index 2ef68d2..2d9052c 100644 --- a/categories/devops.md +++ b/categories/devops.md @@ -153,5 +153,3 @@ terraform apply # Apply changes to cluster - vscode ## Security - -# diff --git a/categories/devops/docker.md b/categories/devops/docker.md index b4e3512..e7b8383 100644 --- a/categories/devops/docker.md +++ b/categories/devops/docker.md @@ -4,10 +4,6 @@ Easy to use, just drag and drop things. -## [Kubernetes](categories/devops/kubernetes.md) - -Which is the actual standard orchestration platform. - ## Benefits of using Docker - escape the app dependency matrix From 0eae920ce0bdc4dff5adbf97f064a3944c9141ed Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Mon, 2 Dec 2019 14:42:48 +1100 Subject: [PATCH 18/23] Add some more about Kubernetes --- categories/devops/kubernetes.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/categories/devops/kubernetes.md b/categories/devops/kubernetes.md index 0faacba..2b6e1a9 100644 --- a/categories/devops/kubernetes.md +++ b/categories/devops/kubernetes.md @@ -63,15 +63,18 @@ spec: ## Some useful commands ```bash - kubectl config set-context context-name --namespace default-namespace-name #default active context kubectl config view #view config kubectl get nodes #get nodes kubectl get namespaces #get all namespaces kubectl get pods #get pods kubectl get deployments #get deployments +kubectl logs -f --tail 200 # tail logs from some pod kubectl get services #get services kubectl get ingress #get ingresses +kubectl get hpa # get horizontal auto scaling policies +kubectl get all # get all kinds of units +kubectl get secrets -o yaml #view a secret details with yaml format, fields are encrypted with base64 ``` @@ -169,3 +172,13 @@ template: https://blog.hasura.io/draft-vs-gitkube-vs-helm-vs-ksonnet-vs-metaparticle-vs-skaffold-f5aa9561f948/ +## Tools + +### Kubectx and kubens + +Switch faster between clusters and namespaces in kubectl https + +- kubectx for switching contexts +- kubens for switching namespaces + +Github page: https://github.com/ahmetb/kubectx From 8291f9364da13b564c9a0b0c387c4ec4052d27c2 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Mon, 2 Dec 2019 14:47:26 +1100 Subject: [PATCH 19/23] Add kubernetes hpa --- categories/devops/kubernetes.md | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/categories/devops/kubernetes.md b/categories/devops/kubernetes.md index 2b6e1a9..c55bbcc 100644 --- a/categories/devops/kubernetes.md +++ b/categories/devops/kubernetes.md @@ -172,6 +172,66 @@ template: https://blog.hasura.io/draft-vs-gitkube-vs-helm-vs-ksonnet-vs-metaparticle-vs-skaffold-f5aa9561f948/ +## Horizontal scaling + +### V1 +```yaml +apiVersion: autoscaling/v1 +kind: HorizontalPodAutoscaler +metadata: + name: worker-auto-scaling + namespace: x-prod +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: + minReplicas: 1 + maxReplicas: 2 + targetCPUUtilizationPercentage: 75 # trigger point +``` + +### V2 +```yaml +apiVersion: autoscaling/v2beta2 +kind: HorizontalPodAutoscaler +metadata: + name: php-apache + namespace: default +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: php-apache + minReplicas: 1 + maxReplicas: 10 + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 50 + - type: Pods + pods: + metric: + name: packets-per-second + target: + type: AverageValue + averageValue: 1k + - type: Object + object: + metric: + name: requests-per-second + describedObject: + apiVersion: networking.k8s.io/v1beta1 + kind: Ingress + name: main-route + target: + type: Value + value: 10k +``` + ## Tools ### Kubectx and kubens From 030faa475b2a3286a3697679ab54ab54b7c0c1d0 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Mon, 2 Dec 2019 14:49:34 +1100 Subject: [PATCH 20/23] Add resource allocation limits for pods --- categories/devops/kubernetes.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/categories/devops/kubernetes.md b/categories/devops/kubernetes.md index c55bbcc..cc2aaba 100644 --- a/categories/devops/kubernetes.md +++ b/categories/devops/kubernetes.md @@ -231,6 +231,21 @@ spec: type: Value value: 10k ``` +## Limit CPU and memory for pods + +```yaml +ports: +- name: db-port + containerPort: 2345 + protocol: TCP +resources: +requests: + cpu: 30m + memory: 64Mi +limits: + cpu: 200m + memory: 256Mi +``` ## Tools From 24408c0214ceba5466716feb4f73009772f994eb Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Mon, 2 Dec 2019 16:38:00 +1100 Subject: [PATCH 21/23] Add Kubernetes operator --- categories/devops/kubernetes.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/categories/devops/kubernetes.md b/categories/devops/kubernetes.md index cc2aaba..70c0e6f 100644 --- a/categories/devops/kubernetes.md +++ b/categories/devops/kubernetes.md @@ -247,6 +247,33 @@ limits: memory: 256Mi ``` +## Kubernetes Operator + +A Kubernetes Operator is an abstraction for deploying non-trivial applications on Kubernetes. It wraps the logic for deploying and operating an application using Kubernetes constructs. As an example, the `etcd` operator provides an `etcd` cluster as a first-class object. + +### An example Operator + +- deploying an application on demand +- taking and restoring backups of that application’s state +-handling upgrades of the application code alongside related changes such as database schemas or extra configuration settings +- publishing a Service to applications that don’t support Kubernetes APIs to discover them +- simulating failure in all or part of your cluster to test its resilience +- choosing a leader for a distributed application without an internal member election process + +### Use Operator + +``` +kubectl get SampleDB # find configured databases + +kubectl edit SampleDB/example-database # manually change some settings +``` + +### Some 3rd party operators + +- Custom operators list: https://gist.github.com/philips/a97a143546c87b86b870a82a753db14c +- Prometheus operator: https://coreos.com/blog/the-prometheus-operator.html +- + ## Tools ### Kubectx and kubens From d6e70f88de90cf8bd2c853eb55f6d7700f21161a Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Mon, 2 Dec 2019 16:58:31 +1100 Subject: [PATCH 22/23] Add service mesh diagram --- assets/images/service-mesh.png | Bin 0 -> 56230 bytes categories/microservice.md | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 assets/images/service-mesh.png diff --git a/assets/images/service-mesh.png b/assets/images/service-mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ff8dbfc557853f69da15562b98d51ed2a61d2f GIT binary patch literal 56230 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 &#uqlzoAEvEr^S! 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

l8y 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 literal 0 HcmV?d00001 diff --git a/categories/microservice.md b/categories/microservice.md index 92a88f0..ed15866 100644 --- a/categories/microservice.md +++ b/categories/microservice.md @@ -17,7 +17,10 @@ ## Service Mesh -A service mesh is a way to control how different parts of an application share data with one another. Unlike other systems for managing this communication, a service mesh is a dedicated infrastructure layer built right into an app. This visible infrastructure layer can document how well (or not) different parts of an app interact, so it becomes easier to optimize communication and avoid downtime as an app grows. +The term service mesh is used to describe the network of microservices that make up such applications and the interactions between them. As a service mesh grows in size and complexity, it can become harder to understand and manage. Its requirements can include discovery, load balancing, failure recovery, metrics, and monitoring. A service mesh also often has more complex operational requirements, like A/B testing, canary rollouts, rate limiting, access control, and end-to-end authentication. + +![service mesh](https://raw.githubusercontent.com/wahyd4/knowledge-mind-mapping/master/assets/images/service-mesh.png) + ### Opensource Projects From 517eb3ef8c601289b75572fd623f14ef5004d344 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Tue, 3 Dec 2019 09:47:14 +1100 Subject: [PATCH 23/23] add scs --- assets/images/scs.png | Bin 0 -> 78362 bytes categories/microservice.md | 17 +++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 assets/images/scs.png diff --git a/assets/images/scs.png b/assets/images/scs.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0b1b09a9bf9643bf2751232e82b0f7d76cd0ef GIT binary patch literal 78362 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 i - + + +### Self-contained System (SCS) + +The Self-contained System (SCS) approach is an architecture that focuses on a separation of the functionality into many independent systems, making the complete logical system a collaboration of many smaller software systems. This avoids the problem of large monoliths that grow constantly and eventually become unmaintainable. Over the past few years, we have seen its benefits in many mid-sized and large-scale projects. + +The idea is to break a large system apart into several smaller self-contained systems, or SCSs, that follow certain rules. + +![Self contained system](https://raw.githubusercontent.com/wahyd4/knowledge-mind-mapping/master/assets/images/scs.png)