Fitehirizana angon-drakitra maharitra ao amin'ny Elasticsearch

Fitehirizana angon-drakitra maharitra ao amin'ny Elasticsearch

Igor Sidorenko no anarako, mpitarika ara-teknika ao amin'ny ekipan'ny mpitantana aho izay mitazona ny fotodrafitrasa manontolon'ny Domclick.

Te-hizara ny traikefako amin'ny fametrahana fitahirizana angon-drakitra voazara ao amin'ny Elasticsearch aho. Hojerentsika hoe inona ny toe-javatra eo amin'ny node no tompon'andraikitra amin'ny fizarana shards, ny fomba fiasan'ny ILM sy ny fiasan'izy ireo.

Ireo izay miasa amin'ny hazo, amin'ny fomba iray na amin'ny fomba hafa, dia miatrika ny olana amin'ny fitahirizana maharitra ho an'ny fanadihadiana any aoriana. Ao amin'ny Elasticsearch, marina indrindra izany, satria ny zava-drehetra dia nampalahelo tamin'ny fiasan'ny curator. Ny version 6.6 dia nampiditra fampiasa ILM. Misy dingana 4 izany:

  • Mafana - Nohavaozina sy anontaniana ny fanondroana.
  • Mafana - Tsy havaozina intsony ny fanondroana, fa mbola anontaniana.
  • Mangatsiaka - Tsy nohavaozina intsony ny tondro ary zara raha anontaniana. Ny fampahalalana dia tsy maintsy mbola azo karohina, saingy mety ho miadana kokoa ny fangatahana.
  • Fafao - Tsy ilaina intsony ny fanondroana ary azo esorina soa aman-tsara.

NATAO

  • Elasticsearch Data Hot: 24 processeur, 128 GB fahatsiarovana, 1,8 TB SSD RAID 10 (8 nodes).
  • Elasticsearch Data mafana: 24 processeur, 64 GB fahatsiarovana, 8 TB NetApp SSD Policy (4 nodes).
  • Elasticsearch Data Cold: 8 processeur, 32 GB fahatsiarovana, 128 TB HDD RAID 10 (4 nodes).

tanjona

Ireo toe-javatra ireo dia tsirairay, miankina amin'ny toerana misy ny nodes, ny isan'ny index, ny logs, sns. Manana data 2-3 TB isan'andro izahay.

  • 5 andro - Dingana mafana (8 lehibe / 1 dika mitovy).
  • 20 andro - Fafana mafana (mihena-fanondro 4 lehibe / 1 kopia).
  • 90 andro - dingana mangatsiaka (freeze-index 4 lehibe / 1 kopia).
  • 120 andro - Famafana dingana.

Fametrahana Elasticsearch

Mba hanaparitahana shard amin'ny node dia mila parameter iray ihany ianao:

  • Hot- nodes:
    ~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr
    # Add custom attributes to the node:
    node.attr.box_type: hot
  • mafana- nodes:
    ~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr
    # Add custom attributes to the node:
    node.attr.box_type: warm
  • Cold- nodes:
    ~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr
    # Add custom attributes to the node:
    node.attr.box_type: cold

Fametrahana Logstash

Ahoana no fiasan'izy rehetra ary ahoana no nampiharantsika an'io endri-javatra io? Andao hanomboka amin'ny fidirana amin'ny logs amin'ny Elasticsearch. Misy fomba roa:

  1. Maka logstash avy amin'ny Kafka. Afaka maka madio na niova fo eo anilanao.
  2. Misy zavatra manoratra amin'ny Elasticsearch, ohatra, mpizara APM.

Diniho ny ohatra iray amin'ny fitantanana ny index amin'ny Logstash. Mamorona index izany ary mihatra aminy lamina fanondroana ary mifanaraka Ilm.

k8s-ingress.conf

input {
    kafka {
        bootstrap_servers => "node01, node02, node03"
        topics => ["ingress-k8s"]
        decorate_events => false
        codec => "json"
    }
}

filter {
    ruby {
        path => "/etc/logstash/conf.d/k8s-normalize.rb"
    }
    if [log] =~ "[warn]" or [log] =~ "[error]" or [log] =~ "[notice]" or [log] =~ "[alert]" {
        grok {
            match => { "log" => "%{DATA:[nginx][error][time]} [%{DATA:[nginx][error][level]}] %{NUMBER:[nginx][error][pid]}#%{NUMBER:[nginx][error][tid]}: *%{NUMBER:[nginx][error][connection_id]} %{DATA:[nginx][error][message]}, client: %{IPORHOST:[nginx][error][remote_ip]}, server: %{DATA:[nginx][error][server]}, request: "%{WORD:[nginx][error][method]} %{DATA:[nginx][error][url]} HTTP/%{NUMBER:[nginx][error][http_version]}", (?:upstream: "%{DATA:[nginx][error][upstream][proto]}://%{DATA:[nginx][error][upstream][host]}:%{DATA:[nginx][error][upstream][port]}/%{DATA:[nginx][error][upstream][url]}", )?host: "%{DATA:[nginx][error][host]}"(?:, referrer: "%{DATA:[nginx][error][referrer]}")?" }
            remove_field => "log"
        }
    }
    else {
        grok {
            match => { "log" => "%{IPORHOST:[nginx][access][host]} - [%{IPORHOST:[nginx][access][remote_ip]}] - %{DATA:[nginx][access][remote_user]} [%{HTTPDATE:[nginx][access][time]}] "%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][bytes_sent]} "%{DATA:[nginx][access][referrer]}" "%{DATA:[nginx][access][agent]}" %{NUMBER:[nginx][access][request_lenght]} %{NUMBER:[nginx][access][request_time]} [%{DATA:[nginx][access][upstream][name]}] (?:-|%{IPORHOST:[nginx][access][upstream][addr]}:%{NUMBER:[nginx][access][upstream][port]}) (?:-|%{NUMBER:[nginx][access][upstream][response_lenght]}) %{DATA:[nginx][access][upstream][response_time]} %{DATA:[nginx][access][upstream][status]} %{DATA:[nginx][access][request_id]}" }
            remove_field => "log"
        }
    }
}
output {
    elasticsearch {
        id => "k8s-ingress"
        hosts => ["node01", "node02", "node03", "node04", "node05", "node06", "node07", "node08"]
        manage_template => true # Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ шаблонами
        template_name => "k8s-ingress" # имя примСняСмого шаблона
        ilm_enabled => true # Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ILM
        ilm_rollover_alias => "k8s-ingress" # alias для записи Π² индСксы, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ
        ilm_pattern => "{now/d}-000001" # шаблон для создания индСксов, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ "{now/d}-000001" Ρ‚Π°ΠΊ ΠΈ "000001"
        ilm_policy => "k8s-ingress" # ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° прикрСпляСмая ΠΊ индСксу
        index => "k8s-ingress-%{+YYYY.MM.dd}" # Π½Π°Π·Π²Π°Π½ΠΈΠ΅ создаваСмого индСкса, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ %{+YYYY.MM.dd}, зависит ΠΎΡ‚ ilm_pattern
    }
}

Kibana setup

Misy lamina fototra izay mihatra amin'ny fanondro vaovao rehetra. Izy io dia mametraka ny fizarana ny mari-pamantarana mafana, ny isan'ny shards, ny kopia, sns. Ny lanjan'ny mΓ΄dely dia voafaritra amin'ny safidy order. Ny mΓ΄dely manana lanja ambony kokoa dia manafoana ny mari-pamantarana mΓ΄dely efa misy na manampy vaovao.

Fitehirizana angon-drakitra maharitra ao amin'ny Elasticsearch
Fitehirizana angon-drakitra maharitra ao amin'ny Elasticsearch

GET_template/default

{
  "default" : {
    "order" : -1, # вСс шаблона
    "version" : 1,
    "index_patterns" : [
      "*" # примСняСм ΠΊΠΎ всСм индСксам
    ],
    "settings" : {
      "index" : {
        "codec" : "best_compression", # ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сТатия
        "routing" : {
          "allocation" : {
            "require" : {
              "box_type" : "hot" # распрСдСляСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ горячим Π½ΠΎΠ΄Π°ΠΌ
            },
            "total_shards_per_node" : "8" # максимальноС количСство ΡˆΠ°Ρ€Π΄ΠΎΠ² Π½Π° Π½ΠΎΠ΄Ρƒ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ индСкса
          }
        },
        "refresh_interval" : "5s", # ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» обновлСния индСкса
        "number_of_shards" : "8", # количСство ΡˆΠ°Ρ€Π΄ΠΎΠ²
        "auto_expand_replicas" : "0-1", # количСство Ρ€Π΅ΠΏΠ»ΠΈΠΊ Π½Π° Π½ΠΎΠ΄Ρƒ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ индСкса
        "number_of_replicas" : "1" # количСство Ρ€Π΅ΠΏΠ»ΠΈΠΊ
      }
    },
    "mappings" : {
      "_meta" : { },
      "_source" : { },
      "properties" : { }
    },
    "aliases" : { }
  }
}

Ampiharo amin'ny fanondroana ny sarintany avy eo k8s-ingress-* mampiasa mΓ΄dely manana lanja ambony kokoa.

Fitehirizana angon-drakitra maharitra ao amin'ny Elasticsearch
Fitehirizana angon-drakitra maharitra ao amin'ny Elasticsearch

GET _template/k8s-ingress

{
  "k8s-ingress" : {
    "order" : 100,
    "index_patterns" : [
      "k8s-ingress-*"
    ],
    "settings" : {
      "index" : {
        "lifecycle" : {
          "name" : "k8s-ingress",
          "rollover_alias" : "k8s-ingress"
        },
        "codec" : "best_compression",
        "routing" : {
          "allocation" : {
            "require" : {
              "box_type" : "hot"
            }
          }
        },
        "number_of_shards" : "8",
        "number_of_replicas" : "1"
      }
    },
    "mappings" : {
      "numeric_detection" : false,
      "_meta" : { },
      "_source" : { },
      "dynamic_templates" : [
        {
          "all_fields" : {
            "mapping" : {
              "index" : false,
              "type" : "text"
            },
            "match" : "*"
          }
        }
      ],
      "date_detection" : false,
      "properties" : {
        "kubernetes" : {
          "type" : "object",
          "properties" : {
            "container_name" : {
              "type" : "keyword"
            },
            "container_hash" : {
              "index" : false,
              "type" : "keyword"
            },
            "host" : {
              "type" : "keyword"
            },
            "annotations" : {
              "type" : "object",
              "properties" : {
                "value" : {
                  "index" : false,
                  "type" : "text"
                },
                "key" : {
                  "index" : false,
                  "type" : "keyword"
                }
              }
            },
            "docker_id" : {
              "index" : false,
              "type" : "keyword"
            },
            "pod_id" : {
              "type" : "keyword"
            },
            "labels" : {
              "type" : "object",
              "properties" : {
                "value" : {
                  "type" : "keyword"
                },
                "key" : {
                  "type" : "keyword"
                }
              }
            },
            "namespace_name" : {
              "type" : "keyword"
            },
            "pod_name" : {
              "type" : "keyword"
            }
          }
        },
        "@timestamp" : {
          "type" : "date"
        },
        "nginx" : {
          "type" : "object",
          "properties" : {
            "access" : {
              "type" : "object",
              "properties" : {
                "agent" : {
                  "type" : "text"
                },
                "response_code" : {
                  "type" : "integer"
                },
                "upstream" : {
                  "type" : "object",
                  "properties" : {
                    "port" : {
                      "type" : "keyword"
                    },
                    "name" : {
                      "type" : "keyword"
                    },
                    "response_lenght" : {
                      "type" : "integer"
                    },
                    "response_time" : {
                      "index" : false,
                      "type" : "text"
                    },
                    "addr" : {
                      "type" : "keyword"
                    },
                    "status" : {
                      "index" : false,
                      "type" : "text"
                    }
                  }
                },
                "method" : {
                  "type" : "keyword"
                },
                "http_version" : {
                  "type" : "keyword"
                },
                "bytes_sent" : {
                  "type" : "integer"
                },
                "request_lenght" : {
                  "type" : "integer"
                },
                "url" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword"
                    }
                  }
                },
                "remote_user" : {
                  "type" : "text"
                },
                "referrer" : {
                  "type" : "text"
                },
                "remote_ip" : {
                  "type" : "ip"
                },
                "request_time" : {
                  "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis||dd/MMM/YYYY:H:m:s Z",
                  "type" : "date"
                },
                "host" : {
                  "type" : "keyword"
                },
                "time" : {
                  "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis||dd/MMM/YYYY:H:m:s Z",
                  "type" : "date"
                }
              }
            },
            "error" : {
              "type" : "object",
              "properties" : {
                "server" : {
                  "type" : "keyword"
                },
                "upstream" : {
                  "type" : "object",
                  "properties" : {
                    "port" : {
                      "type" : "keyword"
                    },
                    "proto" : {
                      "type" : "keyword"
                    },
                    "host" : {
                      "type" : "keyword"
                    },
                    "url" : {
                      "type" : "text",
                      "fields" : {
                        "keyword" : {
                          "type" : "keyword"
                        }
                      }
                    }
                  }
                },
                "method" : {
                  "type" : "keyword"
                },
                "level" : {
                  "type" : "keyword"
                },
                "http_version" : {
                  "type" : "keyword"
                },
                "pid" : {
                  "index" : false,
                  "type" : "integer"
                },
                "message" : {
                  "type" : "text"
                },
                "tid" : {
                  "index" : false,
                  "type" : "keyword"
                },
                "url" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword"
                    }
                  }
                },
                "referrer" : {
                  "type" : "text"
                },
                "remote_ip" : {
                  "type" : "ip"
                },
                "connection_id" : {
                  "index" : false,
                  "type" : "keyword"
                },
                "host" : {
                  "type" : "keyword"
                },
                "time" : {
                  "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis||dd/MMM/YYYY:H:m:s Z",
                  "type" : "date"
                }
              }
            }
          }
        },
        "log" : {
          "type" : "text"
        },
        "@version" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "ignore_above" : 256,
              "type" : "keyword"
            }
          }
        },
        "eventtime" : {
          "type" : "float"
        }
      }
    },
    "aliases" : { }
  }
}

Aorian'ny fampiharana ny maodely rehetra dia mampihatra ny politikan'ny ILM izahay ary manomboka manara-maso ny fiainan'ny index.

Fitehirizana angon-drakitra maharitra ao amin'ny Elasticsearch

Fitehirizana angon-drakitra maharitra ao amin'ny Elasticsearch

Fitehirizana angon-drakitra maharitra ao amin'ny Elasticsearch

GET _ilm/policy/k8s-ingress

{
  "k8s-ingress" : {
    "version" : 14,
    "modified_date" : "2020-06-11T10:27:01.448Z",
    "policy" : {
      "phases" : {
        "warm" : { # тСплая Ρ„Π°Π·Π°
          "min_age" : "5d", # срок ΠΆΠΈΠ·Π½ΠΈ индСкса послС Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π΄ΠΎ наступлСния Ρ‚Π΅ΠΏΠ»ΠΎΠΉ Ρ„Π°Π·Ρ‹
          "actions" : {
            "allocate" : {
              "include" : { },
              "exclude" : { },
              "require" : {
                "box_type" : "warm" # ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ индСкс
              }
            },
            "shrink" : {
              "number_of_shards" : 4 # ΠΎΠ±Ρ€Π΅Π·Π°Π½ΠΈΠ΅ индСксов, Ρ‚.ΠΊ. Ρƒ нас 4 Π½ΠΎΠ΄Ρ‹
            }
          }
        },
        "cold" : { # холодная Ρ„Π°Π·Π°
          "min_age" : "25d", # срок ΠΆΠΈΠ·Π½ΠΈ индСкса послС Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π΄ΠΎ наступлСния Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°Π·Ρ‹
          "actions" : {
            "allocate" : {
              "include" : { },
              "exclude" : { },
              "require" : {
                "box_type" : "cold" # ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ индСкс
              }
            },
            "freeze" : { } # Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅ΠΌ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
          }
        },
        "hot" : { # горячая Ρ„Π°Π·Π°
          "min_age" : "0ms",
          "actions" : {
            "rollover" : {
              "max_size" : "50gb", # ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ индСкса Π΄ΠΎ Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ (Π±ΡƒΠ΄Π΅Ρ‚ Ρ…2, Ρ‚.ΠΊ. Π΅ΡΡ‚ΡŒ 1 Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°)
              "max_age" : "1d" # ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ срок ΠΆΠΈΠ·Π½ΠΈ индСкса Π΄ΠΎ Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ
            },
            "set_priority" : {
              "priority" : 100
            }
          }
        },
        "delete" : { # Ρ„Π°Π·Π° удалСния
          "min_age" : "120d", # ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ срок ΠΆΠΈΠ·Π½ΠΈ послС Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ
          "actions" : {
            "delete" : { }
          }
        }
      }
    }
  }
}

olana

Nisy olana teo amin'ny sehatry ny fanamboarana sy ny debugging.

Dingana mafana

Ho an'ny fihodinana marina amin'ny indices dia zava-dehibe ny fisian'ny farany index_name-date-000026 endrika isa 000001. Misy andalana ao amin'ny kaody izay manamarina ny fanondro amin'ny fampiasana fomba fiteny mahazatra amin'ny fisian'ny isa amin'ny farany. Raha tsy izany dia hisy hadisoana, tsy hisy politika hampiharina amin'ny index, ary ho ao anatin'ny dingana mafana foana izany.

Dingana mafana

hihemotra (cutoff) - mampihena ny isan'ny shards, satria manana 4 nodes ao amin'ny dingana mafana sy mangatsiaka. Ny antontan-taratasy dia ahitana ireto andalana manaraka ireto:

  • Ny fanondroana dia tsy maintsy vakiana fotsiny.
  • Ny dika mitovy amin'ny ampahany rehetra ao amin'ny fanondroana dia tsy maintsy mipetraka amin'ny node iray ihany.
  • Tokony ho maitso ny sata ara-pahasalaman'ny cluster.

Mba hanesorana ny fanondroana, Elasticsearch dia mamindra ny ampahany voalohany amin'ny node iray, mandika ny tondro voatetika miaraka amin'ny masontsivana ilaina, ary avy eo dia mamafa ny taloha. fikirana total_shards_per_node dia tsy maintsy mitovy na lehibe kokoa noho ny isan'ny shards lehibe mba hifanaraka amin'ny node iray. Raha tsy izany dia hisy fampandrenesana ary tsy hifindra any amin'ny nodes marina ny shards.

Fitehirizana angon-drakitra maharitra ao amin'ny Elasticsearch
Fitehirizana angon-drakitra maharitra ao amin'ny Elasticsearch

GET /shrink-k8s-ingress-2020.06.06-000025/_settings

{
  "shrink-k8s-ingress-2020.06.06-000025" : {
    "settings" : {
      "index" : {
        "refresh_interval" : "5s",
        "auto_expand_replicas" : "0-1",
        "blocks" : {
          "write" : "true"
        },
        "provided_name" : "shrink-k8s-ingress-2020.06.06-000025",
        "creation_date" : "1592225525569",
        "priority" : "100",
        "number_of_replicas" : "1",
        "uuid" : "psF4MiFGQRmi8EstYUQS4w",
        "version" : {
          "created" : "7060299",
          "upgraded" : "7060299"
        },
        "lifecycle" : {
          "name" : "k8s-ingress",
          "rollover_alias" : "k8s-ingress",
          "indexing_complete" : "true"
        },
        "codec" : "best_compression",
        "routing" : {
          "allocation" : {
            "initial_recovery" : {
              "_id" : "_Le0Ww96RZ-o76bEPAWWag"
            },
            "require" : {
              "_id" : null,
              "box_type" : "cold"
            },
            "total_shards_per_node" : "8"
          }
        },
        "number_of_shards" : "4",
        "routing_partition_size" : "1",
        "resize" : {
          "source" : {
            "name" : "k8s-ingress-2020.06.06-000025",
            "uuid" : "gNhYixO6Skqi54lBjg5bpQ"
          }
        }
      }
    }
  }
}

Dingana mangatsiaka

mandry (mangatsiaka) - Mampivaingana ny index izahay mba hanamafisana ny fanontaniana momba ny angona ara-tantara.

Ny fikarohana atao amin'ny tondro mangatsiaka dia mampiasa ny kofehy kely, voatokana, search_throttled mba hifehezana ny isan'ny karoka mifanandrify izay mamely ny potipoti-javatra mangatsiaka isaky ny node. Izany dia mametra ny habetsaky ny fitadidiana fanampiny ilaina amin'ny rafitra data mandalo mifanitsy amin'ny shards mangatsiaka, izay miaro ny nodes amin'ny fanjifana fahatsiarovana tafahoatra.
Ny indices mangatsiaka dia vakiana fotsiny: tsy azonao atao ny mampiditra azy ireo.
Ny fikarohana amin'ny indices mangatsiaka dia andrasana hotanterahina miadana. Tsy natao ho an'ny entam-pikarohana avo lenta ny indices mangatsiaka. Mety haharitra segondra na minitra vao vita ny fikarohana tondro mangatsiaka, na dia vita tao anatin'ny milisegondra aza ireo fikarohana ireo rehefa tsy nivaingana ireo tondro.

vokatra

Nianatra ny fomba hanomanana node hiasa miaraka amin'ny ILM izahay, nanangana mΓ΄dely hizarana shards amin'ireo nodes mafana, ary nanangana ILM ho an'ny tondro misy ny dingana rehetra amin'ny fiainana.

rohy mahasoa

Source: www.habr.com