[RFC] Load Testing

A. Overview

Load Testing / Stress Test is a mechanism for flooding the network with a certain requests during some period time.

To have successfully loadtest we need:

  • Preparation
  • How many request will be use ?
  • How much time execute this loadtesting ?
  • How many microservices involved ?
  • Where is the environment from this loadtest will be impact (onprem, staging, production) ?
  • Cost effective estimation for this loadtesting event ?

B. Technical Documentation

Define your technical documentation for this loadtest (estimation and after loadtesting event)

  • Environment
  • Number of Microservices
  • Number of Request
  • Period Time (Begin – End Snapshot Datetime)
  • Target Metrics
  • Snapshot Result (Metrics Dashboard & Logs)

[RFC] Container Application

Technical documentation for standardization build image application.

Define Core Image as References from sub / child container

  • Ubuntu
# ubuntu-base
FROM ubuntu 20.04
  • Alpine
# alpine-base
FROM alpine 3.15
  • Debian
# debian-base
FROM debian:buster

Docker Meta Data

ARG BUILD_DATE
ARG BUILD_VERSION
ARG GIT_COMMIT
ARG GIT_URL

ENV VENDOR="DevOpsCornerID"
ENV AUTHOR="devopscornerid <support@devopscorner.id>"
ENV IMG_NAME="core-ubuntu"
ENV IMG_VERSION="20.04"
ENV IMG_DESC="core-ubuntu image"
ENV IMG_ARCH="amd64/x86_64"

## Simple Description ##
LABEL maintainer="$AUTHOR" \
      architecture="$IMG_ARCH" \
      ubuntu-version="$IMG_VERSION" \
      org.label-schema.build-date="$BUILD_DATE" \
      org.label-schema.name="$IMG_NAME" \
      org.label-schema.description="$IMG_DESC" \
      org.label-schema.vcs-ref="$GIT_COMMIT" \
      org.label-schema.vcs-url="$GIT_URL" \
      org.label-schema.vendor="$VENDOR" \
      org.label-schema.version="$BUILD_VERSION" \
      org.label-schema.schema-version="$IMG_VERSION" \
      
## Additional Detail Description ##
      org.opencontainers.image.authors="$AUTHOR" \
      org.opencontainers.image.description="$IMG_DESC" \
      org.opencontainers.image.vendor="$VENDOR" \
      org.opencontainers.image.version="$IMG_VERSION" \
      org.opencontainers.image.revision="$GIT_COMMIT" \
      org.opencontainers.image.created="$BUILD_DATE" \
      fr.hbis.docker.base.build-date="$BUILD_DATE" \
      fr.hbis.docker.base.name="$IMG_NAME" \
      fr.hbis.docker.base.vendor="$VENDOR" \
      fr.hbis.docker.base.version="$BUILD_VERSION"
    
-----
eg (detail):
LABEL maintainer="$AUTHOR" \
      architecture="$IMG_ARCH" \
      ubuntu-version="$IMG_VERSION" \
      org.label-schema.build-date="$BUILD_DATE" \
      org.label-schema.name="$IMG_NAME" \
      org.label-schema.description="$IMG_DESC" \
      org.label-schema.vcs-ref="$GIT_COMMIT" \
      org.label-schema.vcs-url="$GIT_URL" \
      org.label-schema.vendor="$VENDOR" \
      org.label-schema.version="$BUILD_VERSION" \
      org.label-schema.schema-version="$IMG_VERSION" \
      org.opencontainers.image.authors="$AUTHOR" \
      org.opencontainers.image.description="$IMG_DESC" \
      org.opencontainers.image.vendor="$VENDOR" \
      org.opencontainers.image.version="$IMG_VERSION" \
      org.opencontainers.image.revision="$GIT_COMMIT" \
      org.opencontainers.image.created="$BUILD_DATE" \
      fr.hbis.docker.base.build-date="$BUILD_DATE" \
      fr.hbis.docker.base.name="$IMG_NAME" \
      fr.hbis.docker.base.vendor="$VENDOR" \
      fr.hbis.docker.base.version="$BUILD_VERSION"

Install Container with no cache

  • Ubuntu / Debian
RUN apt -o APT::Sandbox::User=root update; sync
RUN apt-get update; sync
RUN apt-get install -y [packages]
  • Alpine
RUN apk add --no-cache --update [packages]

Remove unused packages from sub / child container that never use inside container

  • Ubuntu / Debian
RUN apt-get remove [packages]; sync
RUN apt-get clean; sync
  • Alpine
RUN rm -rf /var/cache/apk/*

Use sub / child docker container for installation library and for better compression size use cascade builder images

  • From Core Image or Parent
FROM ubuntu-core:latest
FROM alpine-core:latest
FROM debian-core:latest
  • Cascade (Multistage) Builder
### Builder ###
FROM golang:1.17-alpine3.15 as builder

WORKDIR /go/src/app
ENV GIN_MODE=release
ENV GOPATH=/go

RUN apk add --no-cache \
        build-base \
        git \
        curl \
        make \
        bash

RUN git clone https://github.com/zeroc0d3/go-bookstore.git /go/src/app

RUN GOOS=linux GOARCH=amd64 CGO_ENABLED=0 \
    cd /go/src/app && \
        go build -mod=readonly -ldflags="-s -w" -o goapp

### Binary ###
FROM golang:1.17-alpine3.15

ENV GIN_MODE=release
COPY --from=builder /go/src/app/goapp /usr/local/bin/goapp

ENTRYPOINT ["/usr/local/bin/goapp"]
EXPOSE 8080

Laravel Cheatsheet

Composer

COMMAND DESCRIPTION
composer create-project laravel/laravel ProjectName --prefer-dist Create new Laravel project
composer require laravelcollective/html Laravel Forms & HTML components (additional steps)
composer require laracasts/flash Easy flash messages for Laravel App by JeffreyWay (GitHub)
composer require intervention/image Import image handling and manipulation library for Laravel (additional steps)
composer update Update composer file
composer dump-autoload Regenerates the list of all classes

Artisan

COMMAND DESCRIPTION
php artisan make:controller nameController Make new Controller class
php artisan make:controller nameController --resource Make new Controller class with RESTful Resource
php artisan make:model ModelName Make new Model class
php artisan make:request nameRequest Make new Request class
php artisan make:middleware nameMiddleware Make new Middleware class
php artisan make:auth Install registration and login views and routes for all authentication end-points.
php artisan route:list List all routes
php artisan migrate Make migration
php artisan migrate:rollback Rollback the last database migration
php artisan make:migration create_table_name --create="table_name" Create table
php artisan make:migration add_column_name --table="table_name" Add column to the table
php artisan app:name ApplicationName Change application name
php artisan down Put the application into maintenance mode
php artisan up Bring the application out of maintenance mode
php artisan dump-autoload Regenerate framework autoload files