728x90
728x90
728x90
  • 스케일링의 종류
    • Vertical Scaling(Scale up)
      • 개별 리소스의 성능을 늘림
      • 단점
        • 성능은 16배 올라도 비용은 30배 오르는 경우가 발생
    • Horizontal Scaling(Scale out)
      • 개별 리소스의 규모를 늘림
      • 장점
        • 성능과 비용은 선형적으로 비례
        • 탄력성이 존재, 즉 필요한 만큼 썼다가 안 썼다가 할 수 있음
  • AWS Auto Scaling
    • AWS Auto Scaling은 애플리케이션을 모니터링하고 용량을 자동으로 조정하여, 최대한 저렴한 비용으로 안정적이고 예측 가능한 성능을 유지합니다. AWS Auto Scaling을 사용하면 몇 분 만에 손쉽게 여러 서비스 전체에서 여러 리소스에 대해 애플리케이션 규모 조정을 설정할 수 있습니다.
    • 종류
      • EC2 Auto Scaling
      • DDB Auto Scaling(DynamoDB)
      • Splot Fleet Auto Scaling
      • Aurora Auto Scaling
      • ECS Auto Scaling
  • EC2 Auto Scaling
    • 특징
      • 정확한 수의 EC2 인스턴스를 보유하도록 보장
      • 그룹의 최소 인스턴스 숫자 및 최대 인스턴스 숫자를 지정
        • 최소 숫자 이하로 내려가지 않도록 인스턴스 숫자를 유지
        • 최대 숫자 이상 늘어나지 않도록 인스턴스 숫자 유지
      • 다양한 스케일링 정책 적용 가능
        • CPU의 부하에 따라 인스턴스 크기를 늘리기
      • AZ에 인스턴스가 골고루 분산될 수 있또록 인스턴스를 분배
    • 방법
      • 무엇을 실행시킬 것인가?를 정의하는 Launch configurations, Launch template
        • EC2 타입, 사이즈
        • AMI
        • security group, Key, IAM
        • 유저 데이터
          • 인스턴스가 실행되고 초기작업이 필요한 경우 사용한다.
      • 언제 실행시킬 것인가?, 즉 모니터링 및 상태확인
        • CloudWatch and/or ELB와 연계
      • 얼마나 어떻게 실행시킬것인가?
        • 최대/최소/원하는 인스턴스 숫자 입력
        • ELB와 연동
    • 태그
      • AutoScaling Group을 생성할 때 입력한 태그는 AutoScaling의 EC2 인스턴스 모두에 적용된다.

 

출처

쉽게 설명하는 AWS 기초 강좌 12:EC2 Autoscaling(오토스케일링) - YouTube

728x90

'Cloud > AWS' 카테고리의 다른 글

[AWS] CloudWatch  (0) 2022.01.24
728x90

즉 왜 Arithmetic mean, Geometric mean이 아니라 Harmonic mean으로 했는가? 

 

1. 

AM >= GM >= HM인 와중에 HM으로 정의함으로서 

좀 더 낮은 값인 HM을 통해, reliable함을 얻을 수 있다.

 

2. 

large outlier metric에 대한 기여를 낮출 수 있다.

즉, precision과 recall 중 하나가 나머지 하나에 비해 클 때, 그 큰 값의 영향력을 보정하여 mesure함

 

3. 주어진 데이터 값의 scale/unit이 어떻냐에 따라 활용하는 mean이 다르다.

AM은 각각이 same units일 때

GM은 각각이 다른 units일 때

HM은 각각이 rate일 때

 

4. (Fbeta를 쓰는 이유)

recall이 precision보다 beta만큼 더 중요도를 부과하고 싶다면(weighted harmonic mean)

그 때의 weighted harmonic mean으로 fbeta사용(beta=2->recall이 precision보다 2배 중요)

 

 

 

참고자료:

Harmonic Mean (mathsisfun.com)

 

Harmonic Mean

Harmonic Mean The harmonic mean is: the reciprocal of the average of the reciprocals Yes, that is a lot of reciprocals! Reciprocal just means 1value. The formula is: Where a,b,c,... are the values, and n is how many values. Steps:  Calculate the reciproca

www.mathsisfun.com

 

Arithmetic, Geometric, and Harmonic Means for Machine Learning (machinelearningmastery.com)

 

Arithmetic, Geometric, and Harmonic Means for Machine Learning

Calculating the average of a variable or a list of numbers is a common operation in machine learning. It is an operation you may use every day either directly, such as when summarizing data, or indirectly, such as a smaller step in a larger procedure when

machinelearningmastery.com

Harmonic mean - Wikipedia

 

Harmonic mean - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Inverse of the average of the inverses of a set of numbers In mathematics, the harmonic mean (sometimes called the subcontrary mean) is one of several kinds of average, and in particul

en.wikipedia.org

 

728x90
728x90

class로부터 객체를 생성할 때

__new__가 실행되고 이후 __init__이 실행된다.

__new__를 생략했을 시, 상위 class의 __new__를 실행하여 객체를 생성한다.

상위 클래스를 생략했다면 object class의 __new__를 실행하여 객체를 생성한다.

 

즉, object 클래스의 __new__를 오버라이딩하여 객체생성을 커스텀할 수가 있음

 

 

 

질문 1

객체 생성을 커스텀할 필요가 있나?

->싱글톤 패턴 참고

 

728x90
728x90

상속이 일어난 경우 

super를 사용할 일이 있다.

 

super(C, self).method(sth) 란

C의 상위에서부터(A->B->C 형태의 상속이라면)

B에서부터 method을 찾고 그 method의 인자로 sth을 넣어서

self, super(C, self).method(sth) line을 포함하고 있는 class의 instance에

적용하란 의미이다.

 

질문1

B에 method가 없고 A에 있다면?

->A의 method가 실행됨

B에 method가 있다면?

->B의 method가 실행됨

 

질문2

B에 method가 존재하는 것을 개발자가 미리 알고 있어서 

super(C, self).method(sth) 대신에

B.method(sth)을 쓰면 안되나?

->코드 유지보수면에 있어서 super(C, self).method(sth)가 유리(B의 class명을 바꾼다거나 등을 생각)

 

질문3

super().method(sth)의 의미는 무엇인가?

->super()는 super(현재 class, self)와 같음

즉, C라는 class 내부에 super().method(sth)했다면 super(C, self)와 같음

 

 

정리하면, super()는 현재 class 내의 method와 이름이 같은 것인데 걔가 아닌 상위 클래스의 method을 써야할 때 사용한다. 

특히 __init__ method에서 상위 class내의 __init__을 그대로 사용하고, 추가 작업을 할 때 보통 사용

즉, super().__init__(*arg)같은 형태로 많이 사용함

 

참고자료:

Python | super() in single inheritance - GeeksforGeeks

 

Python | super() in single inheritance - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

 

728x90
728x90

먼저 변수는 2가지로 나뉜다. Quantitative냐 Categorical이냐

숫자로 측정되면 Quantitative, 범주로 측정되면 Categorical

 

먼저 변수의 성질부터 알아보자.

 

(1) 두 변수의 비율이 의미가 유지되는가?

(2) 두 변수의 차이의 의미가 유지되는가?

(3) 두 변수간 대소비교가 가능한가?

 

3가지 모두 만족 -> Ratio scale, 예를 들면 대한민국의 매년 GDP값(quantative)

(2), (3)만 만족 -> Interval scale, 예를 들면 년도와 온도(0이 절대 0이라는 의미를 갖고 있지 않아 비율로써 의미가 없음)(quantatative)

(3)만 만족 -> Ordinal scale, 예를 들면 학점(A, B, C, D, F), 순위 비교는 가능하지만 사칙연산이 의미가 보존되지 않음(categorical)

(1), (2), (3) 모두 불만족 -> Nominal scale, 예를 들면 종교, 남성/여성 

 

고용상태는? Nominal(Ordinal로 착각하면 안됨)

사람의 몸무게(kg)은? Ratio

산성도(ph)는? Interval

 

728x90
728x90

A distributed system is a collection of independent components located on different machine sthat share messages with each other in order to achieve common goals.

 

 

 

Cluster:

소프트웨어로 연결된 machines의 set, 협력하여 task처리를 위함, 클러스터 밖에서는 클러스터는 곧 a single system으로 로 보임

 

Node:

클러스터 구성 machine으로 server/virtual machine 등

 

Commodity hardware:

다나와 같은 데서 그냥 구입가능한(off-the-shelf) 기성품 하드웨어를 가리킴

 

Scalability:

분산 시스템에서 하드웨어(가용 컴퓨팅 리소스 변경)/소프트웨어(스케쥴링 메소드 변경)으로 dynamically 컴퓨팅 퍼포먼스를 조절하는 능력

(하드웨어적으로는 # of processors 변경, hard disk capacity변경 등, 소프트웨어적으로는 the degree of parallelism 변경, 스케쥴링 방식 변경 등)

 

Fault tolerance:

분산 시스템에서 리소스를 일부 제거하여도 연속적으로 동작하는 능력

 

Robustness:

기대하는 환경에서가 아닌 좀 더 무리한 상황(stress)에서 작동하는 능력

 

Rolling upgrades:

한번에 모든 nodes에 upgraded software를 deploy하는 게 아니라 점진적으로 upgraded software를 deploy하는 전략

 

Vertical scaling:

CPU/RAM/DISK 등을 single machine에 추가하는 방식의 scaling

 

Horizontal scaling:

other machines을 기존 pool of resources에 추가하는 방식의 scaling

 

Replication:

different machines에 same data를 replicate

이렇게 함으로써 fault tolerance/reduce latency 효과가 가능

 

Partitioning:

splitting dataset into parts and distributing them among different nodes.

이렇게 함으로써 different nodes 각각이 분산 처리를 통하여 scalability 효과가 가능

 

Data locality:

computation이 가능한 영역으로 데이터를 옮기는 것이 아니라,

데이터가 있는 곳으로 computation이 옮기는 방식

이는 network traffic을 줄이는 효과가 가능

 

Rebalancing partitions:

partitioning에서 특정 nodes에 data가 더 많이 몰리거나 node의 추가/제거 가 이루어질 때

한 node에서 다른 node로 data이동을 가리킨다.

 

Consistency:

모든 nodes가 동시에 같은 데이터를 보는 능력, 그러한 환경이면 system is consistent라 한다.

 

Availability:

distributed system에서 어떠한 시간에서도 모든 request가 non-error response를 받아보는 능력

(Not-consistent available이라면, 모든 request가 non-error response를 받지만, 그 결과가 not recent data이기도 한 상황)

 

Partitiion tolerance:

nodes사이에 충분한 replica를 두어(replication) 특정 nodes사이에 네트워킹이 누락되더라도 타 nodes의 도움으로 system이 fail하지 않는 능력을 가리킴

 

CAP Theorem:

Consistency/Availability/Partition tolerance, 이 셋 중 최대 2개만 guarantee할 수 있는 Theorem

(즉 3개다 만족시킬 순 없고 CA/CP/AP 중 하나를 택하는 게 최선이라는 것)

 

Read after write consistency:

데이터의 변화 즉시 그 변화를 확인 or 최신 데이터 로드 를 할 수 있는 능력

 

Eventual consistency:

분산 시스템 내 일련의 writing/updating이 있다면, 그 작업으로 인한 타 nodes에 update가 필요할 수 있다. 그 변화가 시스템 전체에 업데이트 되는 능력을 가리킨다.

(예를 들어 한 남자의 구매내역이 변경 시, 그로인한 타 통계지표 변화가 얼만큼 빨리 변화가 이루어지냐는 것)

 

Small files problem:

Hadoop에서는 HDFS방식의 small files가 많은 방식으로의 저장형태면 computing performance가 현저히 떨어지는 현상

728x90
728x90

Data serialization (encoding, marshalling) is the process of converting structured data to a format that allows sharing or storage of the data in a form that allows recovery of its original structure.

즉, 정형데이터(table)을 전달/저장이 가능하고 수신자/다시 볼 사람 이 로드하였을 때 원본을 다시 볼 수 있는 format으로 converting하는 과정이다.

 

아래에는 Data serialization의 예를 살펴보자.

 

 

Parquet:

column-wise

binary format(따라서 not human-readable)

column-by-column compression(따라서 각 column마다 different encoding type가능)

 

Avro:

row-wise

binary format(따라서 not human-readable)

robust support for schemas(that change over time)

(schema definition written together with the data in a file)

 

CSV(Comma Separated Values)

tabular data(each line have the same number of fields)

human-readable

 

JSON(JavaScript Object Notation):

key:value encoding format

lightweight data-interchange format(적은 용량으로 수신자/송신자 사이 데이터 교환에서 데이터 손실이 거의 없는 가벼운 형식)

human-readable

easy for machine to parse and generate

(value는 큰따옴표안에 string, number ,true ,false , null, object ,array이 올수 있다.)

 

YAML(YAML Ain't Markup Language):

human-readable

minimalistic syntax

(주로 configuration에 사용)

(아래 참고자료에 사용 예시가 잘 나와 있음)

 

XML(eXtensible Markup Language):

markup language

human-readable

 

 

 

참고자료:

150+ Concepts Heard in Data Engineering | by Dardan Xhymshiti | Towards Data Science

 

150+ Concepts Heard in Data Engineering

A Comprehensive Glossary For Data Engineers

towardsdatascience.com

R, Python 분석과 프로그래밍의 친구 (by R Friend) :: [Python] PyYAML로 YAML 파일 읽고 쓰기 (Parse and Serialize YAML in Python) (tistory.com)

 

[Python] PyYAML로 YAML 파일 읽고 쓰기 (Parse and Serialize YAML in Python)

이전 포스팅에서 Python으로 JSON 데이터 읽고 쓰기, XML 데이터 읽고 쓰기에 대해서 소개한 적이 있습니다. 이번 포스팅에서는 Python의 PyYAML 라이브러리를 이용하여 YAML 파일을 파싱하여 파이썬 객

rfriend.tistory.com

 

728x90

'삭제대상' 카테고리의 다른 글

[OS]Multiprogramming, multitasking  (0) 2020.11.24
728x90

Accuracy는 데이터의 내용이 정확한 지

예를 들어 A의 계좌에 $1 million이 존재한다는 데이터의 내용이 실제와 같은가?

 

Completeness는 필요한 데이터가 모두 존재하는 지

예를 들어 First, Middle, Last name중 Middle도 필요한 데, Middle도 존재하는 지

 

Reliability는 해당 데이터가 다른 소스에서 온 데이터와 일치하는 지

예를 들어 S로 온 데이터에서 A의 생년월일과 T로 온 데이터에서 A의 생년월일이 같은지

 

Relevance는 해당 데이터가 정말로 필요한 지

예를 들어 날씨 정보를 크롤링하는 데 정말로 이게 필요한 것인 지

 

Timeliness는 해당 데이터가 얼마나 최신의 것인 지

예를 들어 과거의 데이터가 현재의 것으로 렌더링 된 것인지

 

 

 

기본적으로 새로운 도메인의 데이터를 까볼 때 위의 내용들이 충분히 자연스럽게 떠오르지만

DB를 설계한다거나 분석에 앞서서, 위의 ACRRT를 염두하여 빠뜨린 것은 없는 지 체크하는 데에 사용하자.

 

728x90
728x90

멀티프로그래밍:

메모리에 여러 프로그램을 올려둔 다음

한 프로세스가 대기 상태가 되면 다른 프로세스의 작업을 수행

즉 CPU입장에서는 쉬지않고 일하여 효율적임

 

멀티태스킹(=시분할 시스템, time sharing):

프로세스마다 작업 시간을 정해두고 번갈아가면서 작업하는 방식

(사용자는 마치 여러 프로세스가 동시에 진행되는 것처럼 "보이게" 됨, 실제론 동시가 아니라 프로세서가 왔다리 갔다리 하는 중)

 

728x90

'삭제대상' 카테고리의 다른 글

Data Serialization(Parquet, Avro, JSON, YAML, XML, CSV)  (0) 2020.12.12
728x90

program:디스크에 저장된 수동적인 것

process:메인 메모리에 존재하는 능동적인 것

thread:프로세스의 작업 흐름

 

하나의 프로그램에 프로세스는 다수 가능

하나의 프로세스에 스레드는 다수 가능

 

멀티스레드 프로세스는 다수의 program counter를 갖는다.

 

프로세스는 상태를 갖는다.

new(새로생성)

ready(프로세서 할당 기다림)

running(프로세서가 할당되어 실행중)

terminated(실행중 종료됨)

waiting(작업이 완료되어 입출력을 기다림)

 

멀티프로그래밍으로 여러 프로세스를 메모리에 올려둬도 되는데 굳이 스레드를 여럿두어 멀티스레딩을 하는 이유는

-두 프로세스가 하나의 데이터를 공유하려면 메시지 패싱이나 공유 메모리 등을 사용해야되는데 효율도 떨어지고 개발자가 구현 및 관리하기가 번거로움

-프로세스 사이 컨텍스트 스위칭이 계속 일어나면 오버헤드가 발생, 스레드 전환에도 컨텍스트 스위칭이 발생하지만 속도가 더 빠름

(메시지 패싱:interprocess communication 중 하나로, 커널을 통해 정보를 송수신, 컨텍스트 스위칭 발생하여 느림, 동기화문제가 발생할 수 있음(수신자가 메시지 받을 때까지 송신자를 blocking 등의 형태로 동기화문제해결책 개발을 해줘야함)

(공유 메모리:커널을 거치지않고 두 프로세스가 메모리 일정역역을 사용하여 정보를 송수신, memory-safe를 개발자가 구현해야하는데 번거로움)

 

 

728x90

+ Recent posts