(출처: http://arsviator.blogspot.kr/2015/03/mqttmessage-queue-telemetry-transport.html?view=classic)

Introduction

MQTT(Message Queue Telemetry Transport) 프로토콜은 기계간 통신(M2M)/IoT를 위한 프로토콜이다. HTTP의 request/response 방식 대신 브로커를 사용한 publish/subscribe 방식으로 메시지를 주고 받는다. 물론 MQTT 역시 HTTP와 마찬가지로 TCP/IP 프로토콜 위에서 동작한다. 이 프로토콜의 첫번째 버젼은 1999년 Andy Stanford-Clark와 Arlen Nipper에 의해 발표되었다. 2013년 IBM이 OASIS 표준화 기구에 MQTT v3.1을 제출하여 승인받았다. 또한 비 TCP/IP 네트웍 상에서 동작하는 MQTT의 변종도 존재한다. MQTT-SN은 ZigBee 기반 네트웍 상에서 사용된다.
MQTT는 최소한의 프로토콜 오버헤드만으로 동작할 수 있기 때문에 임베디드 시스템같이 한정된 자원을 가진 시스템이나 저대역폭(low bandwidth) 또는 불안정한 네트웍 환경에서도 사용할 수 있다. 또한 다양한 언어를 지원하는 라이브러리들이 공개되어 있다. mbed에서라면 mbed MQTT library, 아두이노에서는 arduino client for MQTT를 사용할 수 있다.
이 기술이 특히 흥미로운 것은 모든 데이터를 단일 transport 메커니즘으로 처리한다는 것이다. 즉 특정 서비스를 위해 각각 따로 방화벽을 설정할 필요 없이, 단일 TCP 포트만으로 모든 종류의 메시지를 전달하는데 충분하다.



MQTT에서 publish/subscribe를 위한 메시지 큐를 '네트웍의 트위터'라고 생각할 수도 있다. 클라이언트는 특정 토픽에 대한 메시지를 수신하기 위해 토픽을 구독(subscribe)하고, 다른 클라이언트는 그 토픽에 대한 메시지를 발행(publish)한다. 메시지들은 토픽으로 분류된다. 예를들어 nagios/mta, nagios/disk, test/kr/private 같은 식의 토픽을 가질 수 있다. 클라이언트는 임의 갯수의 토픽을 구독할 수 있고, 구독할 토픽에 와일드카드를 포함할 수도 있다. (예: nagios/#) MQTT에서 메시지는 최대 256MB 크기의 UTF-8 BLOB이다.

Publish/Subscribe 모델


MQTT는 일반적으로 웹에서 사용되는 client/server 모델 대신 publish/subscribe(발행/구독) 모델을 사용한다. Client/server 모델에서는 클라이언트가 그 상대방이 되는 서버와 직접 통신을 하게 된다. 하지만 publish/subscribe 모델은 특정 메시지를 보내는 클라이언트(즉 publisher)와 그 메시지를 받는 다른 클라이언트들(즉 subscriber)를 분리시켜 서로는 상대방의 존재 여부를 모른다. 그러므로 통신을 하기 위해서는 publisher와 subscriber 양측이 모두 다 알고 있는 broker라 불리는 3번째 컴포넌트가 필요하게 된다. (publisher건 subscriber건) 모든 클라이언트는 브로커와 통신을 하고, 브로커는 자신이 받은 메시지들을 필터링 해 적절하게 분배하게 된다.



위의 그림에서 온도센서가 publisher, 랩탑과 스마트폰이 subscriber, HiveMQ가 MQTT 브로커가 된다. Subscriber들이 구독하길 원하는 토픽(여기서는 'temperature')이 있으면 그 토픽에 대해 브로커에게 구독신청(subscribe)을 한다. 그 후 온도센서가 측정한 온도값을 'temperature'라는 토픽으로 브로커에게 발행(publish)하게 된다. MQTT 브로커는 'temperature' 토픽에 대한 메시지를 받으면 해당 토픽을 구독하고 있는 subscriber들(여기서는 랩탑과 스마트폰)에게 이 메시지를 전달해준다. 토픽을 구독하는 클라이언트는 여러대가 될 수도 있다. 이 경우 publisher는 자신이 발행한 토픽을 구독한 subscriber가 몇개인지 신경 쓸 필요가 없다. (해당 토픽을 구독한 subscriber가 하나도 없을수도 있다.) 메시지는 브로커를 통해 전달되기 때문에 publisher와 subscriber는 서로의 IP주소와 포트를 알고 있을 필요도 없고, 서로 동시에 실행되고 있을 필요도 없다.

QoS (Quality of Service)


모든 메시지는 QoS값을 가지고 publish 된다. MQTT에는 3가지 QoS 타입이 있다.

  • QoS_0 - "At most once" TCP/IP 네트웍 상에서 최대의 노력을 기울여 메시지가 전달되도록 함. 하지만 메시지가 중복되거나 분실될 수도 있음. 센서값이 한번 분실되어도 금새 다음번 값을 publish하기 때문에 분실되는 것이 큰 문제가 되지 않는 경우에 사용
  • QoS_1 - "At least once" 메시지가 전달되는걸 보장. 하지만 이로 인해 중복이 발생할 수도 있음
  • QoS_2 - "Exactly once" 메시지가 한번만 전달되는걸 보장. 과금 정보처럼 메시지 분실이나 중복이 문제를 발생시킬 수 있는 경우에 사용


Scalability


그리고 publish/subscribe 모델은 기존의 client/server 모델에 비해 훨씬 더 큰 확장성을 가지고 있다. 브로커의 동작이 event-driven 방식이기 때문에 쉽게 병렬화가 가능하기 때문이다. 또한 메시지 캐슁과 지능적 라우팅이 확장성을 증가시키는데 결정적이다. 하지만 publish/subscribe를 동시에 수백~수천만개를 처리하도록 확장시키는건 역시 큰 문제이다. 하지만 이 경우도 클러스터 브로커 노드를 상요해 개별 서버의 로드를 로드밸런싱 하는 것으로 해결할 수 있다.


Posted by Golmong
:


(출처 : http://blog.daum.net/sunwookim77/99)


하이퍼바이저[Hypervisor]

프로세서나 메모리와 같은 다양한 컴퓨터 자원에 서로 다른 각종 운영 체제(OS)의 접근 방법을 통제하는 얇은 계층의 소프트웨어,다수의 OS를 하나의 컴퓨터 시스템에서 가동할 수 있게 하는 소프트웨어로 중앙 처리 장치(CPU)와 OS 사이에 일종의 중간웨어로 사용되며 ,하나의 컴퓨터에서 서로 다른 OS를 사용하는 가상 컴퓨터를 만들 수 있는 효과적인 가상화 엔진이다.

하이퍼바이저(the Hypervisor)

- VMM(Virtual Machine Monitor , or Manager) 라고도 불려진다.

하이퍼바이저는 여러 개의 OS가 단일 하드웨어 호스트를 공유할 수 있도록 하는 프로그램 각 OS는 호스트의 프로세스, 메모리 및 기타 자원들을 모두 스스로 나타낸다.

하이퍼바이저의 역할은 높은 수준의 관리 및 모니터링 도구에 대한 인터페이스를 제공하는 것 이외에, OS 간 서로를 방해하지 못하도록 VM에 대한 자원 및 메모리를 활당 등을 처리하는 것이다.

하이퍼바이저는 크게 두가지 타입으로 나뉘진다.

 

{참고 : Xen은 몇몇 회사들이(ORACLE , Citrix , Sun ,and Virtual lron등등 ..)가상화를 구현하기 위해 사용되는 opened-source 가상화 소프트웨어}

1) Type 1하이퍼바이저(Native or Bare-Metal) 하드웨어 제어 및

Guest OS 모니터로 호스트의 하드웨어에서 직접 실행하는 소프트웨어 시스템이다.

Bare-Metal 가상화 기술은 현재 기업의 데이터센터 분야를 이끌고 있다.

VMware ESX는 현재 기업의 가상화 시장을 이끌고 있다.

하아퍼바이저는 하드웨어 위에 위치해 있다. 이런 이유로 Bare-Metal 가상화라 불려진다.

이런 이유로 많은 데이터센터들이 ESX, Xen , and Hyper-V 와 같이 Bare-Metal 상품을 사용한다.

그이유는 , 이런한 상품들은 OS(호스트 가상화 사용)로부터 오는 오버헤드를 감소시켜 빠른 속도를 제공하기 때문이다.

 

반가상화 형태

2) Type 2 하이퍼바이저(Hosted) 기존의 OS 환경에서 실행되는 소프트웨어 응용 프로그램이다

이러한 유형의 하이퍼바이저는 일반적으로 Microsoft의 Virtal PC 나 VMWare 의 Workstation와 같은 클라이언트(user) 쪽에서의 가상화 프로그램이다.

              

전가상화의 형태

전가상화(Full-Vitualization), 반가상화(Para-Virtualization)

전가상화(Full-Vitualization)

이진코드 변환기법(binary code translation)을 사용하는 VMM(Virtual Machine Monitor) 위에서 윈도우에서 리눅스까지 다양한 운영체제를 이용할 수 있는 구조로, Guest OS를 수정할 필요가 없이 하드웨어를 완전히 가상화 하는 방식이다. 시스템 전체를 완전히 가상화하여 시스템의 BIOS(Basic Input/Output System)부터 CPU,Memory, I/O 등을 완전히 시뮬레이션 하여 가상화하는 방법을 사용한다.(KVM , Hyper-V , VMWare, ESX Server ,Xen)하드웨어를 완전히 가상화 하기 때문에 가상머신OS의 아무런 수정 없이Window, Linux까지 다양한 OS를 이용할 수 있다. 다만 전가상화를 실현하기 위하여 CPU의 VT(Virtualization Technology)를 이용하므로 성능의 저하가 발생한다는 단점이 있다.

                                      

반가상화(Para-Virtualization)

가상화가 전용된 리눅스 커널들을 시스템 부팅시 저용하므로 모든 장치를 가상화 하는 것은 아니다. 결국 CPU레벨에서 에뮬레이션 하는게 아니라, OS커널을 수정해서 커널 함수 호출을 하면 바로 그게 호스트 커널로 전달시키도록 만든 방식이라 오버헤드(시스템에서 목적으로 하는 효과를 얻기 위한 본질적인 것은 아니지만 요구하는 작동, 또는 그 때문에 필요한 자원 ) 가 적다.

하지만 OS커널 수정이 필요하기 때문에 오픈소스OS(리눅스 등)에서만 동작한다.

가상머신이 직접하드웨어를 제어하는 것이 아니라 하이퍼바이저에게 맡긴다.

하이퍼바이저를 제어 하기 때문에 높은 성능을 유지 할 수 있다.

하지만 반가상화를 실현하기 위해서는 가상머신OS의 커널 일부분을 수정해야 한다.

//이건 때문에 다소 시간이 걸리죠.

                   

 

Posted by Golmong
:


진심 요즘은 멘탈이 강해지고 싶다... 

그런데 그게 스스로를 부정하는 것과도 같은 것이니, 정말이지 쉬운 것이 아니다...



멘탈이 강한 사람들의 13가지 특징

 

 

 

 

 



1. 그들은 자신의 환경이나 주변 사람을 탓하지 않는다.

정신적으로 강한 사람들은 그들이 처한 환경에 대해 한탄하거나 남들이 그들을 어떻게 대하는지에 대해 서운해 하느라 허송 세월을 보내지 않는다. 대신 그들은 삶이 항상 쉽거나 공정하지 않다는 것을 이해한다.

2. 그들은 정신력을 낭비하지 않는다.

그들은 다른 사람에게 휘둘리지 않으며, 자신도 남을 휘두르지 않는다. 그들은 "상사가 짜증나게 해" 라고 이야기하지 않는다. 왜냐하면 자신의 감정을 컨트롤 할 수 있기 때문이다.

3. 그들은 변화가 두려워서 피하지 않는다.

정신적으로 강한 사람들은 변화를 회피하려 하지 않는다. 불평을 하기보다는 변화에서 긍정적인 면을 찾고, 그것을 유연하게 대처하는 방법을 찾는다. 그들은 변화는 피할 수 없는 것이며 자신들은 그 변화에 적응할 능력이 있다고 믿는다.

4. 그들은 자신들이 컨트롤 하지 못하는 일에 에너지를 낭비하지 않는다.

멘탈이 강한 사람은 교통체증 등에 대해 불평하지 않는다. 대신 그들은 그 안에서 할 수 있는 일을 찾는다. 그들은 인생에서 컨트롤 가능한 것들에 집중한다. 컨트롤 할 수 있는 유일한 것은 자신의 태도뿐이다.

5. 그들은 남의 기분을 맞춰주는 것에 스트레스를 받지 않는다.

그들은 자신이 항상 모든 사람들의 기분을 맞춰줄 필요가 없다는 것을 안다. 그들은 필요할 때 NO 라고 이야기하거나 소리를 높이기도 한다. 그들은 친절하고 공정하기 위해 노력하지만 다른 사람들이 예의를 갖추지 않으면 그들도 친절하게 대하지 않는다.

6. 그들은 예상된 문제점을 피하지 않는다.

그들은 무모하거나 어리석은 위험에 뛰어 들지 않는다. 그러나 이미 예측된 위험을 감수하는 것은 마다하지 않는다. 정신적으로 강한 사람들은 큰 결정을 내리기 전에 위험과 이익을 재보는데 시간을 쓴다. 그리고 그들은 행동에 들어가기 전에 잠재적 손실에 대한 충분한 정보를 파악한다.

7. 그들은 과거에 머무르지 않는다.

정신적으로 강한 사람들은 지나간 시간 속에 머물면서, 그 때 일이 달랐으면 좋았을텐데....하며 시간을 낭비하지 않는다. 그들은 자신의 과거를 인정하고 그것으로부터 어떤 교훈을 얻으려 한다. 그리고 그들은 과거의 영광스러운 날들에 대해 환상을 갖지 않는다. 그들은 현재에 살면서 미래를 계획한다.

8. 그들은 같은 실수를 계속적으로 반복하지 않는다.

정신적으로 강한 사람은 그들의 행동에 대해 책임을 질줄 알며 과거의 실수로부터 새로운 것을 배운다. 그리고 실수들을 계속 반복하지 않는다. 대신에 그들은 계속 움직이며 미래를 위해 더 나은 결정을 한다.

9. 그들은 다른 사람의 성공을 보고 억울해 하지 않는다.

정신적으로 강한 사람들은 다른 사람들이 인생에서 거둔 성공을 축하하고 인정할 줄 안다. 그들은 다른 이들이 자신들을 뛰어 넘는 성공을 거두었을 때, 질투나 배신감을 키우지 않는다. 대신 그들은 열심히 노력한 결과 성공을 하게 된 것이라 인정하고 자신들의 성공을 위한 기회를 찾기 위해 열심히 일을 한다.

10. 그들은 한번의 실패로 포기하지 않는다.

정신적으로 강한 사람은 실패를 포기의 이유로 보지 않는다. 대신, 그들은 성장과 개선을 위한 기회로 실패를 이용한다. 그들은 그것을 바르게 해낼 때까지 계속 시도한다.

11. 그들은 홀로 있는 시간을 낭비하지 않는다.

정신적으로 강한 사람은 홀로 있는 것을 견뎌내며 침묵을 두려워 하지 않고 정체된 시간을 무의미하게 낭비하지 않으며 생산적으로 이용한다. 그들은 홀로 있는 시간을 즐기며 홀로 있으면서도 행복 할 수 있다.

12. 그들은 세상이 그들에게 무엇을 해 주어야 한다고 생각하지 않는다.

정신적으로 강한 사람들은 인생을 살아가는 데 있어서 자신에게 어떤 권리가 있다고 생각하지 않는다. 다른 사람들이 그들을 돌봐줘야 한다거나 세상이 그들에게 뭔가를 해주어야 한다는 식의 사고 방식을 가지고 있지 않다. 대신, 그들은 자신이 가진 장점에 기반하여 기회를 찾는다.

13. 그들은 즉각적인 결과를 기대하지 않는다.

정신적으로 강한 사람은 일을 하거나 어떤 행동을 할 때 즉각적인 결과를 기대하지 않는다. 대신, 그들은 갖고 있는 기술과 시간을 이용하여 실제 변화가 일어나는 데는 시간이 걸린다는 것을 이해한다.

 

 

 

 

 

원문 => http://www.lifehack.org/articles/communication/13-things-mentally-strong-people-dont.html

Posted by Golmong
: